** 

shell awk求和 当第一列相同时,对应的第二列相加

# awk '{sum[$1]+=$2}END{for(c in sum){print c,sum[c]}}' 输入文件名
b812c8fcc3cec3fd96bcc590dc88d43f86942750.jpg



Shell中,我们可以用awk实现按列求和的功能,非常简单

1. 简单的按列求和

    # cat num.txt | awk '{sum += $1} END {print sum}'


2.对符合某些条件的行,按列求和

    cat num.txt | awk ' /aaa/ {sum += $1} END {print sum}'

3. 列求和: cat you.txt |awk '{a+=$1}END{print a}'
 
4. 列求平均值:cat you.txt |awk '{a+=$1}END{print a/NR}'
 
5.列求最大值:cat you.txt |awk 'BEGIN{a=0}{if ($1>a) a=$1 fi}END{print a}'
设定一个变量开始为0,遇到比该数大的值,就赋值给该变量,直到结束。
 
6. 求最小值:cat you.txt |awk 'BEGIN{a=11111}{if ($1<a) a=$1 fi}END{print a}'    反之
 
求全文的最值
例:求test.txt的最值
 
12 34 56 78
24 65 87 90
76 11 67 87
100 89 78 99
for i in `cat test.txt` ;do echo $i; done |sort |sed -n '1p;2p'
 
例2:同样是test.txt
求总和:for i in `cat you.txt`;do echo $i ;done |awk '{a+=$1}END{print a}'
 
例3:
A     88
B     78
B     89
C     44
A     98
C     433
要求输出:
A:88;98
B:78;89
C:44;433
 
awk '{a[$1]=a[$1]" "$2}END{for(i in a)print i,a[i]}' test.txt |awk '{print $1":",$2";",$3}'