我有以下FASTA文件:
>header1
CGCTCTCTCCATCTCTCTACCCTCTCCCTCTCTCTCGGATAGCTAGCTCTTCTTCCTCCT
TCCTCCGTTTGGATCAGACGAGAGGGTATGTAGTGGTGCACCACGAGTTGGTGAAGC
>header2
GGT
>header3
TTATGAT
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
>header1
117
>header2
3
>header3
7
# 3 sequences, total length 127.
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
awk '/^>/ {print; next; } { seqlen = length($0); print seqlen}' file.fa
Run Code Online (Sandbox Code Playgroud)
我用这段代码得到的输出是:
>header1
60
57
>header2
3
>header3
7
Run Code Online (Sandbox Code Playgroud)
我需要一个小修改来处理多个序列行.
我还需要一种方法来获得总序列和总长度.欢迎任何建议......请在bash或awk中.我知道在Perl/BioPerl中很容易做到这一点,实际上,我有一个脚本可以用这些方式来做.
Jua*_*doy 17
一个awk/ gawk溶液可以通过三个阶段组成:
每次header都发现应该执行这些操作:
sequence线,我们只需要累计总数.END舞台上我们打印了残余的seqlen.评论代码:
awk '/^>/ { # header pattern detected
if (seqlen){
# print previous seqlen if exists
print seqlen
}
# pring the tag
print
# initialize sequence
seqlen = 0
# skip further processing
next
}
# accumulate sequence length
{
seqlen += length($0)
}
# remnant seqlen if exists
END{if(seqlen){print seqlen}}' file.fa
Run Code Online (Sandbox Code Playgroud)
一个oneliner:
awk '/^>/ {if (seqlen){print seqlen}; print ;seqlen=0;next; } { seqlen += length($0)}END{print seqlen}' file.fa
Run Code Online (Sandbox Code Playgroud)
对于总数:
awk '/^>/ { if (seqlen) {
print seqlen
}
print
seqtotal+=seqlen
seqlen=0
seq+=1
next
}
{
seqlen += length($0)
}
END{print seqlen
print seq" sequences, total length " seqtotal+seqlen
}' file.fa
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14575 次 |
| 最近记录: |