一. 分組求和
1.對第一個進行分組,對第二列的數據進行累加
awk -F '|' '{s[$1] += $2} END{for(i in s) print i, s[i]} }' srcFile > outFile
分組一般都是用x[$2]=x[$3]….的方式來實現的,其中x[$2]中的$2為要分的組,當然可以多個分組,x[$3]為要處理的值
例如 :
1> 以第五列分組,求第四列和
[root@localhost wms]# cat groupandsum.txt
John|P|physics|2|02/12/2002
Rick|L|Mechanical|1|02/12/2002
Jack|T|electrical|3|03/12/2003
Phil|R|Electrucal|1|03/12/2003
Mike|T|mechamical|2|10/12/2003
Paul|R|chemical|2|10/12/2003
John|T|chemical|3|10/12/2002
Tony|N|chemical|2|10/11/2003
James|R|Electrucal|2|10/11/2003
# awk -F "|" '{x[$5]+=$4} END{for( i in x ){print i,x[i]}}' groupandsum.txt
03/12/2003 4
02/12/2002 3
10/12/2002 3
10/12/2003 4
10/11/2003 4
2.以第一列 為變量名,第一列為變量將相同第一列的第二列數據進行累加打印出和
awk '{s[$1] += $2}END{ for(i in s){ print i, s[i] } }' file1 > file
3.如果第一列相同,則根據第一列來分組,分別打印第二列和第三列的和
awk '{s[$1] += $2; a[$1] += $3 }END{ for(i in s){ print i,s[i],a[i] } }' haha.txt

二. awk分組統計
1.根據第二列值統計第四的個數
awk -F'|' '{if ($2=="aa"){x[$4]++;}}END{for (i in x) {print i "|" x[i]}}' a.log
例 :
1> # cat a.log
1|aa|3|45|5|6|7|8|9|
2|aa|3|44|5|6|7|8|9|
3|aa|3|43|5|6|7|8|9|
4|aa|3|44|5|6|7|8|9|
# awk -F'|' '{if ($2=="aa"){x[$4]++;}}END{for (i in x) {print i "|" x[i]}}' a.log
44|2
45|1
43|1
