這不是我總結的,但我以爲總結的很好,因此把它放在博客裏但願更多人看到。ide
#awk之行與列的count & sum命令總彙博客
#有一個文件file,內容以下:it
10 11 12 13 14class
15awk
16 17 18 19file
20 21方法
22 23 24 25總結
#需求一:每行字段數sort
5di
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]=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){printf "%-3s",a[j,i]}print ""}}' file