awk高级用法

案例一:
 cat a.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'

[root@rac01 zabbix_agentd.d]# more a.txt
2838 root 20 0 884m 61m 29m S 3.9 3.1 3:53.26 ohasd.bin 5402 grid RT 0 759m 225m 52m S 3.9 11.3 2:58.10 ocssd.bin 5313 grid 20 0 827m 45m 24m S 1.9 2.3 0:27.86 oraagent.bin 5375 root RT 0 756m 214m 53m S 1.9 10.7 0:34.73 cssdagent 5506 grid 20 0 736m 42m 20m S 1.9 2.1 0:45.76 evmd.bin 5581 grid 20 0 473m 49m 42m S 1.9 2.5 0:09.54 oracle 5589 grid 20 0 474m 53m 46m S 1.9 2.7 0:23.12 oracle 5591 grid 20 0 482m 54m 42m S 1.9 2.7 0:15.15 oracle 5601 grid -2 0 481m 56m 43m S 1.9 2.8 0:12.17 oracle 5649 root 20 0 1005m 82m 35m S 1.9 4.1 2:03.12 crsd.bin [root@rac01 zabbix_agentd.d]# cat a.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}' 10.7 oracle 3.1 ohasd.bin 11.3 ocssd.bin 4.1 crsd.bin 2.3 oraagent.bin 2.1 evmd.bin 10.7 cssdagent [root@rac01 zabbix_agentd.d]# $NF 源文件的最后一列 a[$NF] 等于 a[最后一列值] a[$NF]+=$10 其中$NF充当数组的下标;将整个文件创建数组 例如:源文件的最后一列值相同时候,自动统计第10列所有相同列的结果 for( k in a) 其中a为数组,k为数组的下标

[root@rac01 zabbix_agentd.d]# cat /etc/passwd | head -3 | awk -F ":" '{a[$1]+=$3}END{for(k in a) print k,a[k]}'
bin 1
daemon 2
root 0

{a[$1]+=$3} ==>>  第一列为下标,第三列为值

a["root"]=0; a["daemon"]=2;a["bin"]=1












原文地址:https://www.cnblogs.com/vmsysjack/p/12618879.html