用awk命令计算文件中某一列的总和:
awk 'BEGIN{sum=0}{sum+=$1}END{print sum}' data.txt
比较完整的一个例子:
awk -F ',' 'BEGIN{sum=0 ;count=0}{if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} } END {print "sum="sum" count="count " avg="sum/count}'
说明:
BEGIN{sum=0 ;count=0} 初始化计数器;
END {print "sum="sum" count="count " avg="sum/count} 打印汇总,计数器 和均值;
if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} 判断倒数第11个字段,判断倒数第一个字段,判断第三个字段(字符串) 第五个字段汇总累加,计数器累加
例:
[root@jp-test-apache var]# du -s /var/lib/*
28860 /var/lib/Pegasus
56 /var/lib/alternatives
15064 /var/lib/canna
8 /var/lib/cs
8 /var/lib/dav
8 /var/lib/dhcp
8 /var/lib/dhcpv6
8 /var/lib/games
8 /var/lib/ibmasm
8 /var/lib/logrotate.status
24 /var/lib/misc
52 /var/lib/news
56 /var/lib/nfs
16 /var/lib/ntp
8 /var/lib/pcmcia
16 /var/lib/php
8 /var/lib/random-seed
35500 /var/lib/rpm
1888 /var/lib/slocate
8 /var/lib/supportinfo
8 /var/lib/up2date
8 /var/lib/webalizer
3884 /var/lib/wnn
计算第一列之和:
[root@jp-test-apache var]# du -s /var/lib/*|awk -F '.' 'BEGIN{sum=0 ;count=0}{sum +=$1; count++;} END {print "sum="sum" count="count " avg="sum/count}'
sum=85512 count=23 avg=3717.91
显示执行过程:
[root@jp-test-apache var]# du -s /var/lib/*|awk -F '.' '{sum +=$1; count++;} {print "sum="sum" count="count " avg="sum/count}'
sum=28860 count=1 avg=28860
sum=28916 count=2 avg=14458
sum=43980 count=3 avg=14660
sum=43988 count=4 avg=10997
sum=43996 count=5 avg=8799.2
sum=44004 count=6 avg=7334
sum=44012 count=7 avg=6287.43
sum=44020 count=8 avg=5502.5
sum=44028 count=9 avg=4892
sum=44036 count=10 avg=4403.6
sum=44060 count=11 avg=4005.45
sum=44112 count=12 avg=3676
sum=44168 count=13 avg=3397.54
sum=44184 count=14 avg=3156
sum=44192 count=15 avg=2946.13
sum=44208 count=16 avg=2763
sum=44216 count=17 avg=2600.94
sum=79716 count=18 avg=4428.67
sum=81604 count=19 avg=4294.95
sum=81612 count=20 avg=4080.6
sum=81620 count=21 avg=3886.67
sum=81628 count=22 avg=3710.36
sum=85512 count=23 avg=3717.91
评论