繁体   English   中英

使用 awk 比较两个不同文件的五列并仅打印两列的差异

[英]Comparing five columns of two different files and printing the differences of only two columns using awk

所以我有第一个文件,如下所示:

第一个.txt:

id|name|place|cost|member|
1|max|USA|55|yes|
2|Jhon|France|99|No|
3|Mary|Canada|777|yes|
4|Berry|USA|888|yes|
5|Stella|Mexico|100|yes|

和文件 second.txt:

id|name|place|cost|member|
1|max|USA|55|No|
2|Jhon|France|99|No|
3|Mary|Canada|770|yes|
4|Berry|USA|888|yes|
5|Stella|Mexico|101|No|

所以在这里我想根据应该相同的前三个列比较这两个文件,如果它们存在于第 4 列和第 5 列中,则打印差异

在这个例子中,我想要的 output 是:

对于 id: 1 和 name: max 和 country: USA 成员从 Yes 更改为 No

对于 id:3 和 name:Mary 和国家:Canada,费用从 777 更改为 770

对于 id:5 和 name:Stella 和国家:Mexico,费用从 100 更改为 101,会员从 Yes 更改为 No

知道我的文件可能包含数千行并且大小不同。

我尝试了 awk 命令,但无法将差异和相似性结合起来,而且 output 缺少行,而且打印不知道放在哪里:

awk -F'|' 'NR++FNR{C[$1,$2,$3]++;C[$4,$5]++; next} C[$1,$2,$3] > 0 && C[$4,$5] == 0'

这应该让你开始

$ awk -F'|'   '{k=$1 FS $2 FS $3} 
     NR==1     {split($0,h)}
     NR==FNR   {f4[k]=$4; f5[k]=$5; next} 
     f4[k]!=$4 {print k, h[4] " changed from " f4[k] " to " $4}' file1 file2

3|Mary|Canada cost changed from 777 to 770
5|Stella|Mexico cost changed from 100 to 101

对字段 5 执行相同操作,您也可以以详细格式打印密钥。 列名保存在h[]数组中。

暂无
暂无

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

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