繁体   English   中英

awk 文件比较

[英]Awk comparison on files

我有2个文件:

文件 1:

1,apple  
2,mango  
3,banana  
44,orange  

文件2:

1,apple  
22,  
31,xyz  
2,man  
3,banana  
44,oran   
44,orange

我需要使用第 1 列和检查第 2 列找出这两个文件的差异。我不想使用 $0 来打印第 1 个文件中第 2 个文件中不存在的行。

结果输出应在 file3 中打印为:

2,mango,man  

截至目前,在其他问题中,我问并得到了以下答案:-

   { awk 'BEGIN{FS=OFS=","}($1 in a) && a[$1]!=$2{print $1,a[$1],$2}{a[$1]=$2}' file1 file2 >> file3 }

此解决方案的问题在于,由于文件 2(第 1 列)中存在重复项,因此在文件 3 中打印错误条目。
我需要在文件 4 中写入这些重复项,不应反映在文件 3 中。

用于根据文件 2 中的唯一记录连接文件

join -t',' <(sort -t',' -k1 file1) <(sort -t',' -n -k1 -u file2) | awk -F',' '{if($2!=$3) print}'

用于在 file2 中查找重复条目

awk -F',' 'seen[$1]++

演示:

$man uniq 
$cat fil*
1,apple  
2,mango  
3,banana  
44,orange
1,apple  
22,  
31,xyz  
2,man  
3,banana  
44,oran   
44,orange
$join -t','  <(sort -t',' -k1 file1) <(sort -t',' -n -k1 -u  file2)  | awk -F',' '{if($2!=$3) print}'
2,mango  ,man  
44,orange,oran   
$

$awk -F',' 'seen[$1]++' file2
44,orange
$

暂无
暂无

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

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