从另一个文件中列出的文件中查找模式


15

我想找到一个文件中列出的模式,然后在另一文件中找到它们。第二个文件的模式用逗号分隔。

例如第一个文件F1具有基因

ENSG00000187546
ENSG00000113492  
ENSG00000166971

第二个文件F2具有这些基因以及一些我需要的列(五列)

 region     gene           chromosome  start       end

 intronic   ENSG00000135870 1   173921301   173921301
intergenic  ENSG00000166971(dist=56181),ENSG00000103494(dist=37091) 16 53594504    53594504
ncRNA_intronic  ENSG00000215231 5   5039185 5039185
intronic    ENSG00000157890 15  66353740    66353740

因此,第二个文件中存在的基因ENSG00000166971不会出现在grep中,因为它带有另一个用逗号分隔的基因。

我的代码是:

grep -f "F1.txt" "F2.txt" >output.txt

即使存在其中一个值,我也想要这些值以及与之关联的数据。是否有任何方法可以做到这一点?


1
您的实现是否可能grep默认锚定其模式?会grep -f <(echo a) <(echo 'a,b')产生任何输出吗?
Joseph R.

Answers:


11

grep您使用的是哪个版本?我尝试了您的代码,并得到以下结果:

$ grep -f file1 file2
ENSG00000187546
ENSG00000113492
ENSG00000166971,ENSG00000186106

如果您只想要匹配的结果,则可以使用grep-o开关仅报告匹配的内容:

$ grep -o -f file1 file2 
ENSG00000187546
ENSG00000113492
ENSG00000166971

grep版本

$ grep --version
grep (GNU grep) 2.14
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

F1.txt中的杂散字符?

在进一步调试时,我注意到文件第二行末尾有几个杂散空格F1.txt。您可以使用查看它们hexdump

$ hexdump -C ff1
00000000  45 4e 53 47 30 30 30 30  30 31 38 37 35 34 36 0a  |ENSG00000187546.|
00000010  45 4e 53 47 30 30 30 30  30 31 31 33 34 39 32 20  |ENSG00000113492 |
00000020  20 0a 45 4e 53 47 30 30  30 30 30 31 36 36 39 37  | .ENSG0000016697|
00000030  31 0a                                             |1.|
00000032

它们以ASCII码20的形式显示。您可以在此处查看它们32 20 20 0a


1
grep --version GNU grep 2.6.3版权所有(C)2009 Free Software Foundation,Inc.许可证GPLv3 +:GNU GPL版本3或更高版本< gnu.org/licenses/gpl.html >这是免费软件:您可以自由更改并重新分配它。在法律允许的范围内,没有任何担保。如果匹配项是单独存在的,我只会得到它们,而不是您所说的。奇怪的是,我得到的唯一匹配项是文件中包含要匹配的模式的最后一个模式。
罗恩

1
我粘贴了第二个文件的完整版本,但行数较少,并尝试搜索它。它与第二个文件的第二行不匹配
Ron

1
@Ron-在导致问题的F1.txt文件中,字符串的末尾有流浪字符。刚刚确认它适用于精细的grep(GNU的grep)2.5.1
SLM

1
我只是将文件保存为Unix-LF格式的文本管理器,现在就可以使用了!!
罗恩

2
@罗恩-是空白的乐趣8
slm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.