我有两个文件:
seqs.fa:
>seq000007;size=72768;
ACTGTGAG
>seq000010;size=53132;
GTAAGATC
GAATTCTT
>seq00045;size=40321;
ACCCATTT
...
numbers.txt
72768
53132
我想要的输出是第一个文件中与第二个文件中的数字匹配的行:
>seq000007;size=72768;
>seq000010;size=53132;
我尝试使用awk
,但它只返回与第一个数字匹配的行:
awk -F"\n" -v RS=">" 'NR==FNR{for(i=1;i<=NF;i++) A[$i]; next} END {for (header in A) {if ( match(header,$1) ) {print header}}}' seqs.fa numbers.txt
seq000007;size=72768;
seq072768;size=1;
为什么awk只循环遍历numbers.txt中第一行的“header”数组?而且,如果这是XY problem,是否有更好的方法来实现这一目标?
答案 0 :(得分:2)
修复数字文件中的拼写错误
$ awk -F'=|;' 'NR==FNR{a[$1]; next}; $3 in a' numbers.txt seqs.fa
>seq000007;size=72768;
>seq000010;size=53132;
答案 1 :(得分:0)
在这种特殊情况下,你可以像这样使用GNU grep:
grep -F -f numbers.txt seqs.fa
选项-f filename
使用filename
中找到的所有模式进行搜索。选项-F
告诉grep,模式是简单的固定字符串。