grep或sed比较两个文件中的数据

时间:2014-03-02 07:27:55

标签: sed awk grep

我有一个数据集,我需要在其他文件中找到相同的数据,并需要将输出写入一个文件。 File2不是tab de-liniated。

我的输入文件是 文件1

481063383 
481063385 
481063405 
481063413 
481063414 
481063556 
481063557

文件2

gi|481063385|gb|AGK00601.1| gi|482884784|ref|YP_007881957.1|;gi|525663574|ref|YP_008222546.1|;gi|525702257|ref|YP_008233983.1|;gi|526469531|ref|YP_008339768.1|;gi|493291875|ref|WP_006249566.1|;gi|153093868|gb|EDN74800.1|;gi|452086149|gb|EME02540.1|;gi|481063385|gb|AGK00601.1|;gi|523434386|gb|AGQ41023.1|;gi|523447581|gb|AGQ25466.1|;gi|526275739|gb|AGR75939.1|;gi|528826207|gb|EPZ02985.1|;gi|528876793|gb|EPZ27820.1|;gi|528877212|gb|EPZ28234.1|;gi|528878693|gb|EPZ29697.1|    100.00  100.00  183 0   0   1   183 1   183 1e-137    384
gi|481063385|gb|AGK00601.1| gi|472332995|ref|YP_007665270.1|;gi|472337367|ref|YP_007669641.1|;gi|505296972|ref|WP_015484074.1|;gi|472257232|gb|AGI31762.1|;gi|472261604|gb|AGI36133.1|  100.00  100.00  183 0   0   1   183 3   185 2e-137    384
gi|481063385|gb|AGK00601.1| gi|544866331|ref|WP_021280149.1|;gi|528822399|gb|EPY99332.1|    99.45   100.00  183 1   0   1   183 1   183 6e-137    382

输出

481063413 
481063414

类似这样的事情

我试过了 grep -f file1 file2 > results.txt

我尝试使用shell脚本中的循环,但输出是空文件。 我该怎么做这个工作?

2 个答案:

答案 0 :(得分:2)

我不清楚你如何得到你在问题中显示的输出,所以假设你只想要来自File2的匹配数字,你可以(使用问题中的输入数据):< / p>

$ grep -of File1 File2 
481063385
481063385
481063385
481063385

如果您只想要发生唯一事件,请将其传递给sort -u

$ grep -of File1 File2 | sort -u
481063385

答案 1 :(得分:0)

修改:在此问题的上一个版本中,file1显示了 space - 已分隔的标记(而非新行分隔的标记);如果这代表真正的输入,我的答案适用。

如果file1中的搜索字词确实以空格分隔,则必须将它们与换行符分开,而不是与grep的{​​{1}}选项一起使用 (另外,如果搜索词是文字,使用-f执行文字搜索会更安全); -F确保仅输出匹配项(由换行符分隔):

-o