如何在文件中找到与另一个文件中的行匹配的行?

时间:2013-12-12 08:09:51

标签: sed awk grep

我有一个包含11列文字或数字的大文件:

ETNOFIKK 03001 E0146 a1 1001 0146 10303001 10 500 EKO24 2001_200

ETNOFIKK 03002 E0147 a1 1001 0147 10303002 10 500 EKO24 2001_200

ETNOFIKK 03003 E0148 a1 1001 0148 10303003 10 500 EKO24 2001_200

...

和另一个只有一列数字的文件:

0146

0148

...

当第6列与第二个文件的条目匹配时,我需要从第一个文件中提取行。因此,在上面的示例中,如果第二个文件只包含两个条目,则从第一个文件打印第一行和第三行。

由于

3 个答案:

答案 0 :(得分:2)

使用awk

awk 'FNR==NR {a[$1];next} $6 in a' file2 file1
ETNOFIKK 03001 E0146 a1 1001 0146 10303001 10 500 EKO24 2001_200
ETNOFIKK 03003 E0148 a1 1001 0148 10303003 10 500 EKO24 2001_200

这将file2(索引)存储在数组中 然后查看数组中$6是否相等,是,打印行。

答案 1 :(得分:1)

sed 's/^/^\\([^[:blank:]]\\{1,\\}[[:blank:]]\\{1,\\}\\)\\{5\\}/' Other.file > /tmp/pregrep.txt
egrep -f /tmp/pregrep.txt Source.File

只能使用sed(在文件和管道的猫之后)但是更多的指令。所以Jotne的awk似乎是冠军

答案 2 :(得分:0)

试试这个:

awk 'FNR==NR &&NF{a[$1];next} $6 in a' file2 file1