我有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>
答案 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
$