awk之行与列的count & sum命令总汇

来源:互联网 发布:北京 气象站数据 编辑:程序博客网 时间:2024/06/05 03:45

文本:

10 11 12 13 14
15
16 17 18 19
20 21
22 23 24 25

1) 每行字段数

awk '{print NF}' file

2) 最大字段数

awk '{max=max<NF?NF:max}END{print max}' file

3) 总共字段个数

awk '{x+=NF}END{print x}' file

4) 所有字段的总和

awk '{for(i=1;i<=NF;i++)x+=$i}END{print x}' file

5) 各行的总和

awk '{x=0;for(i=1;i<=NF;i++){x+=$i};print x}' file

6) 各列的总和

awk '{for(i=1;i<=NF;i++){a[i]+=$i}}END{l=asorti(a,b);for(j=1;j<=l;j++){printf ("%d ",a[b[j]])}printf "\n"}' file

awk '{for(i=1;i<=NF;i++){a[i]+=$i};l=l<NF?NF:l}END{for(j=1;j<=l;j++) printf a[j]" ";printf "\n"}' file

awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{l=length(a);for(j=1;j<=l;j++) printf a[j]" ";printf "\n"}' file

7) 行列交换

awk '{for(i=1;i<=NF;i++)a[NR,i]=$i;max=max<NF?NF:max}END{for(i=1;i<=max;i++){for(j=1;j<=NR;j++){if(length(a[j,i]))printf a[j,i]" "};printf "\n"}}' file

也可以空格补齐

awk '{for(i=1;i<=NF;i++)a[NR,i]=$i;x=x<NF?NF:x}END{for(i=1;i<=x;i++){for(j=1;j<=NR;j++){printf length(a[j,i])?a[j,i]" ":""};printf "\n"}}' file

原创粉丝点击