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 @   小鲨鱼2018  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-11-17 R语言中如何清除向量中的NA、返回非NA的索引、返回指定项的索引
点击右上角即可分享
微信分享提示