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

Ron*_*Ron 23 grep

我想找到一个文件中列出的模式,并在另一个文件中找到它们。第二个文件具有用逗号分隔的那些模式。

例如第一个文件 F1 有基因

ENSG00000187546
ENSG00000113492  
ENSG00000166971
Run Code Online (Sandbox Code Playgroud)

第二个文件 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
Run Code Online (Sandbox Code Playgroud)

所以存在于第二个文件中的基因 ENSG00000166971 没有出现在 grep 中,因为它有另一个基因,用逗号分隔。

我的代码是:

grep -f "F1.txt" "F2.txt" >output.txt
Run Code Online (Sandbox Code Playgroud)

即使存在其中一个值,我也想要这些值,以及与之相关的数据。有什么办法可以做到这一点?

slm*_*slm 16

grep你用的是什么版本?我试过你的代码并得到以下结果:

$ grep -f file1 file2
ENSG00000187546
ENSG00000113492
ENSG00000166971,ENSG00000186106
Run Code Online (Sandbox Code Playgroud)

如果您只想要匹配的结果,您可以使用grep's -oswitch 仅报告匹配的内容:

$ grep -o -f file1 file2 
ENSG00000187546
ENSG00000113492
ENSG00000166971
Run Code Online (Sandbox Code Playgroud)

版本

$ 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>.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

它们显示为 ASCII 代码 20。您可以在这里看到它们:32 20 20 0a

  • @Ron - 是的,空白的乐趣 8-) (2认同)