我想比较两个多列TABBed文件(如果需要,可以是CSVed(中的两列(第4列和第8列(,并分别打印不匹配和新的
table 1 (showing 4th, 8th columns)
100001 28/10/2020
100002 15/03/2017
table 2 (showing 4th, 8th columns)
100001 28/10/2020
100002 18/03/2017
100003 07/12/2018
打印不匹配//因为第8列中的数据不同(日期,三天后(
100002 18/03/2017
打印新//如果表1 中不存在该记录
100003 07/12/2018
我尝试了与stackoverflow不同的方法,回顾了类似的问题并在谷歌上搜索。这个stackoverflow线程是我发现的最接近的,但仍然没有成功
这个一行
awk '{k=$4 FS $8} NR==FNR{a[k]; next} !(k in a)' file1 file2
将输出新的!(a中的k(,但不匹配。但是,应该将7行打印为新的,而不是5行。我想知道第8列中的日期斜杠/是否会影响。然而,它对不匹配没有帮助。
编辑:根据@ed-morton建议更新:
user@machine:~/testing$ cat file1
abc 123 456 100001 def ghi 789 28/10/2020
ujl 764 678 100002 htg dcf 065 15/03/2017
user@machine:~/testing$ cat file2
abc 123 456 100001 def ghi 789 28/10/2020
ujl 764 678 100002 htg dcf 065 18/03/2017
rfg 453 287 100003 grf cfe 764 07/12/2018
user@machine:~/testing$ awk 'NR==FNR{a[$4]=$8; next} a[$4] != $8' file1 file2
ujl 764 678 100002 htg dcf 065 18/03/2017
rfg 453 287 100003 grf cfe 764 07/12/2018
这可能是您想要的(未经测试(:
awk 'NR==FNR{a[$4]=$8; next} a[$4] != $8' file1 file2
第8列或其他任何地方的斜杠或输入中的任何其他特定字符都没有区别,您开始使用的代码和此代码只是进行文字字符串比较。