我经常需要在fasta文件中找到一个特定的序列并打印出来.对于那些不知道的人,fasta是生物序列(DNA,蛋白质等)的文本文件格式.这很简单,你有一行序列名称后跟一个'>'然后跟随所有行,直到下一个'>'是序列本身.例如:
>sequence1
ACTGACTGACTGACTG
>sequence2
ACTGACTGACTGACTG
ACTGACTGACTGACTG
>sequence3
ACTGACTGACTGACTG
Run Code Online (Sandbox Code Playgroud)
我目前获得我需要的序列的方式是使用grep和-A,所以我会这样做
grep -A 10 sequence_name filename.fa
Run Code Online (Sandbox Code Playgroud)
如果我没有看到文件中下一个序列的开始,我会将10改为20并重复,直到我确定我得到了整个序列.
似乎应该有更好的方法来做到这一点.例如,我可以要求它打印到下一个'>'字符吗?
使用>作为记录分隔符:
awk -v seq="sequence2" -v RS='>' '$1 == seq {print RS $0}' file
Run Code Online (Sandbox Code Playgroud)
>sequence2
ACTGACTGACTGACTG
ACTGACTGACTGACTG
Run Code Online (Sandbox Code Playgroud)