cat 234.txt
A01,30,16,11,9,3,2,30,30,16,9,3,2
A02,14,6,12,1,0,7,14,,14,6,1,0,5
A03,4,0,11,3,0,,1,4,0,,4,0,3,8
A09,6,3,16,0,0,,3,6,0,6,3,0,6
对 各列求和
cat 234.txt | awk -F, '{for(i=2;i<=NF;i++) a[i]+=$i ;print} END{ printf "TOTAL "; for(j=2;j<=NF;j++) printf a[j]","; print""}'
cat 234.txt |awk -F, '{for(i=2;i<=NF;i++) a[i]+=$i ;print} END{ printf "TOTAL "; for(j=2;j<=NF;j++) printf a[j]","; print""}'
AA01,30,16,11,9,3,2,30,30,16,9,3,2
AA02,14,6,12,1,0,7,14,,14,6,1,0,5
AA03,4,0,11,3,0,,1,4,0,,4,0,3,8
AA09,6,3,16,0,0,,3,6,0,6,3,0,6
TOTAL 54,25,50,13,3,9,48,40,30,21,11,2,14,
把每列的总和用数组a[i]来表示;用for(i=2;i<=NF;i++)来打印每列的总和
对各行求和
cat 234.txt |awk -F, '{ sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11+$12 ;print $0 " " sum;}'
AB01,30,16,11,9,3,2,30,30,16,9,3,2 159
AC02,14,6,12,1,0,7,14,,14,6,1,0,5 75
AD03,4,0,11,3,0,,1,4,0,,4,0,3,8 27
AF09,6,3,16,0,0,,3,6,0,6,3,0,6 43
分组求和
awk '{s[$1] += $2}END{ for(i in s){ print i, s[i] } }' file1 > file2
以第一列 为变量名 第一列为变量,将相同第一列的第二列数据进行累加 打印出和
awk '{s[$1" "$2] += $3}END{ for(i in s){ print i, s[i] } }' file1 > file2
以第一列和第二列为变量名, 将相同第一列、第二列的第三列数据进行累加 打印出和
awk '{s[$1] += $2; a[$1] += $3 }END{ for(i in s){ print i,s[i],a[i] } }' haha.txt
如果第一列相同,则根据第一列来分组,分别打印第二列和第三列的和
awk '{if(/404/)sum[$1]++}END{for (i in sum) print i,sum[i]}' 123.txt
取最大值、最小值
1、针对(2列的文件)
awk '{max[$1]=max[$1]>$2?max[$1]:$2}END{for(i in max)print i,max[i]}' file
第一列不变,取第二列分组最大值
awk '{if(!min[$1])min[$1]=20121231235959;min[$1]=min[$1]<$2?min[$1]:$2}END{for(i in min)print i,min[i]}' file
第一列不变,取第二列分组最小值
2、针对单列的文件
awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}' file2
awk 'BEGIN {min = 1999999} {if ($1<min) min="$1" fi}="" end="" {print="" "min=", min}' file2
求和、求平均值、求标准偏差
求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
求标准偏差
cat $FILE | awk -v ave=$ave '{sum+=($1-ave)^2}END{print sqrt(sum/(NR-1))}'
整合行和列
1、列换成行
如果第一列相同,将所有的第二列 第三列 都放到一行里面
awk '{qq[$1]=qq[$1](" "$2" "$3)}END{for(i in qq)print i,qq[i]}'