我想从输入的fasta文件中检索n th 序列(或者最好是n th 到m th 序列),理想情况下使用unix“one-liner”。
我知道我可以用perl(或任何其他脚本语言)读取序列,计数,然后打印序列,但我正在寻找更快更紧凑的东西。
对于那些不知道的人,示例fasta文件如下所示:
>SEQUENCE_1
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL
>SEQUENCE_2
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH
答案 0 :(得分:2)
以下是使用awk
的两种方式。
如果您的序列每行包裹1次,这将起作用:
awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa
如果未包装序列行,则可能更合适:
awk -v n=5 -v m=8 '/^>/ { c++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa
答案 1 :(得分:2)
awk
的一种方式:
awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file
答案 2 :(得分:2)
使用sed
:
sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'
答案 3 :(得分:2)
sed一个班轮(不需要管道|
):
sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file