这不是我总结的,但我觉得总结的很好,所以把它放在博客里希望更多人看到。
#awk之行与列的count & sum命令总汇
#有一个文件file,内容如下:
10 11 12 13 14
15
16 17 18 19
20 21
22 23 24 25
#需求一:每行字段数
5
1
4
2
4
**方法一:[root@ /tmp/cdly]# awk '{print NF}' file
#需求二:最大字段数
5
**方法一:[root@ /tmp/cdly]# awk 'NF>max{max=NF}END{print max}' file
#需求三:总共字段个数
16
**方法一:[root@ /tmp/cdly]# awk '{a+=NF}END{print a}' file
#需求四:所有字段的总和
280
**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++){a+=$i}}END{print a}' file
#需求五:各行字段的总和
60
15
70
41
94
**方法一:[root@ /tmp/cdly]# awk '{a=0;for(i=1;i<=NF;i++){a+=$i};print a}' file
#需求六:各列的总和
83 72 54 57 14
**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i in a)printf a[i]" ";print ""}' file #输出结果是无须的
**方法二:[root@ /tmp/cdly]# 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
**方法三:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i=1;i<=asorti(a,b);i++)printf a[b[i]]" ";print ""}' file
#需求七:每行的最大值
14
15
19
21
25
**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++){if($i>max){max=$i}}print max;max=0}' file
#需求八:每列的最大值
22 23 24 25 14
**方法一:[root@ /tmp/cdly]# awk 'NF>max{max=NF}{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=max;i++){for(j=1;j<=NR;j++){if(a[j,i]>b){b=a[j,i]}}printf b" ";b=""}print ""}' file
#需求九:行列交换
10 15 16 20 22
11 17 21 23
12 18 24
13 19 25
14
**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){if(a[j,i]){printf a[j,i]" "}}print ""}}' file
#需求十:行列交换并且以空格补齐空白处
10 15 16 20 22
11 17 21 23
12 18 24
13 19 25
14
**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){if(a[j,i]){printf a[j,i]" "}else{printf " "}}print ""}}' file
**方法二:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]
本文转自 大雪儿 51CTO博客,原文链接:http://blog.51cto.com/dingxue/1971269,如需转载请自行联系原作者=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){printf "%-3s",a[j,i]}print ""}}' file