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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。