簡體   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