linux 中多个标题一列数据的处理

 

1、测试数据

复制代码
root@DESKTOP-1N42TVH:/home/test3# ls
a.txt
root@DESKTOP-1N42TVH:/home/test3# cat a.txt
chr168
0.5
0.66
0.77
0.3
chr254
0.6
0.3
0.89
chr678
0.658
0.5
chr344
0.53
0.596
0.65
0.68
复制代码

 

2、处理1

复制代码
root@DESKTOP-1N42TVH:/home/test3# cat a.txt
chr168
0.5
0.66
0.77
0.3
chr254
0.6
0.3
0.89
chr678
0.658
0.5
chr344
0.53
0.596
0.65
0.68
root@DESKTOP-1N42TVH:/home/test3# awk '{if($0 ~ /chr/) {print "\n"$0} else {printf("%s ", $0)}}' a.txt  | sed '$ s/.$/\n/' | sed '/^$/d' | sed 'N; s/\n/ /'
chr168 0.5 0.66 0.77 0.3
chr254 0.6 0.3 0.89
chr678 0.658 0.5
chr344 0.53 0.596 0.65 0.68
复制代码

 

3、处理2

复制代码
root@DESKTOP-1N42TVH:/home/test3# cat a.txt
chr168
0.5
0.66
0.77
0.3
chr254
0.6
0.3
0.89
chr678
0.658
0.5
chr344
0.53
0.596
0.65
0.68
root@DESKTOP-1N42TVH:/home/test3# awk '{if($0 !~ /chr/) {printf("%s ", $0)} else {printf("\n%s ", $0)}}' a.txt | awk NF
chr168 0.5 0.66 0.77 0.3
chr254 0.6 0.3 0.89
chr678 0.658 0.5
chr344 0.53 0.596 0.65 0.68
复制代码

 

4、处理3

复制代码
root@DESKTOP-1N42TVH:/home/test3# cat a.txt
chr168
0.5
0.66
0.77
0.3
chr254
0.6
0.3
0.89
chr678
0.658
0.5
chr344
0.53
0.596
0.65
0.68
root@DESKTOP-1N42TVH:/home/test3# awk -v RS='chr' 'NR!=1{sum = 0; for(i = 2; i <= NF; i++) sum += $i; print "chr"$1" " sum/(NF - 1)}' a.txt
chr168 0.5575
chr254 0.596667
chr678 0.579
chr344 0.614
复制代码

 

posted @   小鲨鱼2018  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示