[英]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.