awk文件比较

时间:2018-02-12 10:01:15

标签: awk

我有2个文件:

文件1:

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

file2的:

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

我需要使用第1列和第2列检查两个文件的差异。我不想使用$ 0作为打印文件2中不存在的第1个文件的行。< / p>

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

2,mango,man  

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

{awk&#39; BEGIN {FS = OFS =&#34;,&#34;}($ 1 in a)&amp;&amp; a [$ 1]!= $ 2 {打印$ 1,[$ 1],$ 2} {a [$ 1] = $ 2}&#39; file1 file2&gt;&gt; file3}

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

1 个答案:

答案 0 :(得分:0)

用于基于文件2中的唯一记录加入文件

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

用于查找文件2中的重复条目

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
$