2014-01-28 183 views
2

我有兩個文件不均列,我想比較這兩個文件,從文件1比較AWK和輸出不匹配的行兩個文件

文件1刪除匹配行:

nt1 ID420 
nt1 ID42 
nt56 ID6008 
ht44 ID555 
lt12 ID34 
lt12 ID3434 
ntt56 ID667 
klll ID87693 

文件2

nt23 ID42 
ht44 ID555 
lt12 ID3434 

期望輸出繼電器:

nt1 ID420 
nt56 ID6008 
lt12 ID34 
ntt56 ID667 
klll ID87693 

我在以前的帖子中使用了下面的命令,但是結果並不完全匹配,並且這是以匹配的初始字符。我沒有太多的awk命令的exp,我需要awk單行命令或sed或類似的shell腳本來獲得這個輸出。感謝您提前做好:

awk -FS=" " 'NR==FNR {b[$0]; next} {for (x in b) if($0 ~ x) next;print $0}' file2 file1 > outputfile 
+1

爲什麼是「nt1 ID42「從輸出中丟失? –

回答

5

這將是最快的:

grep -vFxf file2 file1 

使用awk:

awk 'NR==FNR {exclude[$0];next} !($0 in exclude)' file2 file1 

如果你不在乎輸出的排序,這是comm用於:

comm -23 <(sort file1) <(sort file2) 
+0

'grep'嘗試很好!我的第一個想法是在這裏使用'diff'和'patch',但是到目前爲止我失敗了。找到'diff --supress-common-lines',它可以以某種方式恢復,但是...仍在嘗試。 'comm'在這裏看起來很有趣..但是,你的'grep'很好! :) – hek2mgl

+0

我的第一個想法是'comm',但它需要對輸入文件進行排序,所以輸出不會像OP所要求的那樣。 –

+0

我也偶然發現了這個限制:)也許他可以忍受那個...... – hek2mgl

相關問題