比较两个不同文件中的两列,并分别打印不匹配的和新的



我想比较两个多列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列或其他任何地方的斜杠或输入中的任何其他特定字符都没有区别,您开始使用的代码和此代码只是进行文字字符串比较。

最新更新