比较两个文件与awk和输出非匹配行

时间:2014-01-28 19:56:45

标签: awk

我有两个列不均匀的文件,我想比较这两个文件并从file1中删除匹配的行

文件1:

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

file2的

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 个答案:

答案 0 :(得分:7)

这将是最快的:

grep -vFxf file2 file1

使用awk:

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

如果您不关心输出是否已排序,则这是comm的用途:

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