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 @ 2022-04-04 00:10  小鲨鱼2018  阅读(48)  评论(0编辑  收藏  举报