我有一个数据集,我需要在其他文件中找到相同的数据,并需要将输出写入一个文件。 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脚本中的循环,但输出是空文件。 我该怎么做这个工作?
答案 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