繁体   English   中英

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

[英]Compare two columns from two different files and print non-matching and new separately

我想比较两个多列 TABBed 文件中的两列(如果需要,可以是 CSV 格式)(第 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

将输出 new !(k in a) ,但不是不匹配的。 但是,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 列或其他任何地方的斜杠或输入中的任何其他特定字符都没有区别,您开始使用的代码和此代码只是进行文字字符串比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM