删除与 grep 不匹配的行
removing lines that don't match by grep
我有一个文件包含感兴趣的基因名称(24423 个基因),另一个文件包含所有基因的长度(41306 个基因)。我只想要 24424 个基因的长度,但是当我 grep
使用 grep -wf file1 file2
甚至 fgrep -Fwf file1 file2
时,我得到了一些多余的基因,因为我列表中的某些基因可能只包含意义或反义链,而如果参考文件可能同时包含这两种链,那将被反映出来。
我想知道是否有办法从参考文件 (file2) 中删除所有不匹配的行?
谢谢。
P.S。问题也在biostars.org
编辑-
file1
A1BG
A1BG-AS1
TSPAN6
我的
MYB-AS1
file2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
desired_output
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
But I always get MYB-AS2 and MYB-AS3
$ cat f1
A1BG
A1BG-AS1
TSPAN6
MYB
MYB-AS1
$ cat f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
$ grep -Fwf f1 f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
grep
在这里无济于事,因为 MYB
将匹配 MYB-
,因为 -
将用作单词边界
改用awk
$ awk 'NR==FNR{a[]; next} in a' f1 f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
NR==FNR{a[]; next}
以第一个文件的第一个字段作为键构建一个数组
in a
如果第一个字段是数组中的键,则从第二个文件打印行。整个字段必须匹配
- 另请参阅 http://backreference.org/2010/02/10/idiomatic-awk/ 了解更多有关此类两个文件处理的信息 examples/explanation
我有一个文件包含感兴趣的基因名称(24423 个基因),另一个文件包含所有基因的长度(41306 个基因)。我只想要 24424 个基因的长度,但是当我 grep
使用 grep -wf file1 file2
甚至 fgrep -Fwf file1 file2
时,我得到了一些多余的基因,因为我列表中的某些基因可能只包含意义或反义链,而如果参考文件可能同时包含这两种链,那将被反映出来。
我想知道是否有办法从参考文件 (file2) 中删除所有不匹配的行?
谢谢。
P.S。问题也在biostars.org
编辑-
file1
A1BG
A1BG-AS1
TSPAN6
我的
MYB-AS1
file2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
desired_output
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
But I always get MYB-AS2 and MYB-AS3
$ cat f1
A1BG
A1BG-AS1
TSPAN6
MYB
MYB-AS1
$ cat f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
$ grep -Fwf f1 f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
MYB-AS2 713
MYB-AS3 396
grep
在这里无济于事,因为 MYB
将匹配 MYB-
,因为 -
将用作单词边界
改用awk
$ awk 'NR==FNR{a[]; next} in a' f1 f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
NR==FNR{a[]; next}
以第一个文件的第一个字段作为键构建一个数组in a
如果第一个字段是数组中的键,则从第二个文件打印行。整个字段必须匹配- 另请参阅 http://backreference.org/2010/02/10/idiomatic-awk/ 了解更多有关此类两个文件处理的信息 examples/explanation