我有一个包含感兴趣的基因名称(24423个基因)的文件,另一个包含所有基因长度的文件(41306个基因)。我希望长度只能用于24424个基因,但当我grep
使用grep -wf file1 file2
或甚至fgrep -Fwf file1 file2
时,我会得到一些多余的基因,因为我列表中的某些基因可能只包含感觉或反义链,而如果参考文件可能包含两者,那么反映。
我想知道是否有办法从参考文件(file2)中删除所有不匹配的行?
谢谢。
P.S。问题还出在biostars.org
上编辑 -
文件1
A1BG
A1BG-AS1
TSPAN6
MYB
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
但我总是得到MYB-AS2和MYB-AS3
答案 0 :(得分:0)
$ 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[$1]; next} $1 in a' f1 f2
A1BG 2941
A1BG-AS1 560
TSPAN6 7923
MYB-AS1 362
NR==FNR{a[$1]; next}
使用第一个文件中的第一个字段作为键构建一个数组$1 in a
从第二个文件中打印行。整个字段必须匹配