Linux 中 shell脚本统计fasta文件中每一条染色体的长度

 

001、 借助数组实现

a、无序输出

[root@pc1 test]# ls
a.fa
[root@pc1 test]# cat a.fa    ## 测试fasta文件
>chr1
aattccgg
ttcc
>chr2
ttccc
>chr3
tttc
cct                           ## 统计脚本
[root@pc1 test]# awk '{if($0 ~ /^>/) {tmp=$0; ay[tmp] = 0} else {ay[tmp] += length($0)}}END {for (i in ay) print i, ay[i]}' a.fa
>chr3 7
>chr1 12
>chr2 5

 

b、有序输出

[root@pc1 test]# ls
a.fa
[root@pc1 test]# cat a.fa      ## 测试fasta
>chr1
aattccgg
ttcc
>chr2
ttccc
>chr3
tttc
cct                            ## 统计程序
[root@pc1 test]# awk 'BEGIN{idx=0}{if($0 ~ /^>/) {idx++; ay1[idx]=$0; ay2[ay1[idx]] = 0} else {ay2[ay1[idx]] += length($0)}} END {for (i = 1; i <= idx; i++) { print ay1[i], ay2[ay1[i]]}}' a.fa
>chr1 12
>chr2 5
>chr3 7

 

002、awk实现

[root@pc1 test]# ls
a.fa
[root@pc1 test]# cat a.fa           ## 测试fasta文件
>chr1
aattccgg
ttcc
>chr2
ttccc
>chr3
tttc
cct                                 ## awk实现
[root@pc1 test]# awk '{if(NR == 1) {printf("%s ", $0); sum = 0}; if(NR > 1 && $0 !~ /^>/) {sum += length($0)}; if(NR > 1 && $0 ~ /^>/) {print sum; sum = 0; printf("%s ", $0)}}END {print sum}' a.fa
>chr1 12
>chr2 5
>chr3 7

 

 

posted @ 2023-11-17 23:34  小鲨鱼2018  阅读(66)  评论(0编辑  收藏  举报