2014-01-28 142 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

相关问题