从一个文件1匹配列表,从文件2中提取相应的行

时间:2012-12-06 09:59:10

标签: linux unix awk grep

假设我有一个参考列表,比如file1.txt,其中包含:

a
b
c 
d

我有file2.txt,数据文件如下:

a 1 2 3
b 5 6 7
d 6 7 8
e 7 8 9

output.txt所需的输出:

a 1 2 3
b 5 6 7
d 6 7 8

我想将file1.txt中的ID与file2.txt的第一列匹配,并将整行(file2.txt行)打印到output.txt

2 个答案:

答案 0 :(得分:7)

这是join的目的:

$ join f1 f2
a 1 2 3
b 5 6 7
d 6 7 8

如果您需要首先sort您的文件:

join <(sort f1) <(sort f2)

答案 1 :(得分:4)

awk 'FNR==NR{a[$1];next}($1 in a)' file1.txt file2.txt

同样在perl:

perl -F -lane '$h{$F[0]}++;if($h{$F[0]}>=2){print $_;}' file1 file2

注意:如果第一个文件具有唯一ID,则上述perl命令将起作用