在文件中搜索包含第二个文件的de行的行

时间:2011-06-08 14:27:15

标签: linux bash

所以我有第一个文件,每行都有一个ID,例如:

458-12-345
466-44-3-223
578-4-58-1
599-478
854-52658
955-12-32

然后我有第二个文件。它在每个文件中都有一个ID,后跟信息,例如:

111-2457-1 0.2545 0.5484 0.6914 0.4222
112-4844-487 0.7475 0.4749 0.1114 0.8413
115-44-48-5 0.4464 0.8894 0.1140 0.1044

...

第一个文件只有1000行,其中包含我需要的信息的ID,而第二个文件的行数超过200,000行。

我在fedora中使用了以下bash命令,效果很好:

cat file1.txt | while read line; do cat file2.txt | egrep "^$line\ "; done > file3.txt

但是我现在正试图在Ubuntu中复制结果,输出是一个空白文件。有没有理由不在Ubuntu中工作?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以一次grep几个字符串:

grep -f id_file data_file

假设 id_file 包含所有ID, data_file 包含ID和数据。

答案 1 :(得分:1)

awk的典型工作:

awk 'FNR==NR{i[$1]=1;next} i[$1]{print}' file1 file2

这将打印第二个文件中第一个具有索引的行。为了更快的速度,请使用mawk。

答案 2 :(得分:0)

这行在Ubuntu中适合我:

cat 1.txt | while read line; do cat 2.txt | grep "$line"; done

然而,这可能会很慢,因为第二个文件(200000行)将被grepped 1000次(第一个文件中的行数)