1.统计问题
给定一个文档 bill.txt,里面是每个用户分批次存的钱,内容如下:
feng 100
yang 200
feng 350
li 200
ma 100000
zhao 239
li 890
zhang 100
zhang 350
ma 1000
请统计出每个用户一共有多少钱?
1.1答案:
[root@master 77]# awk '{name[$1]+=$2}END{for (i in name) print i,name[i]}' bill.txt
li 1329
feng 650
zhang 450
ma 101000
1.2解析:
name[$1]+=$2 拿$1字段做key,让$2做value,如果数组里有key,就累加,如果没有,初始值是0+value。
END{for (i in name) print i,name[i]} END是文件里所有的行都处理完了,最后去执行END部分里的命令。
for 循环取遍历name数组里的元素(item),i取name数组里的key,输出key和对应的value。
2、小练习
1.只显示df -h结果的第1列文件系统
df -h|awk 'NR==1{print NR,$0}'
2.显示passwd文件的第5行和第10行的行号和用名
awk -F':' 'NR==5 ||NR==10{print NR,$1}' /etc/passwd
3.使用NF变量显和passwd文件倒数第二列的内容
tail -2 /etc/passwd|awk 'NR==1{print $0}'
4.显示passwd文件中第5到第10行的用户名
awk -F: 'NR>=5 && NR<=10{print $1}' /etc/passwd
5.显显passwd文件中第7列不是bash的用户名
grep -v bash /etc/passwd |awk -F: '{print $1}'
awk -F: '$7 !~/bash/{print $0}' /etc/passwd
6..显示passwd文件中行号是5结尾的行号和整行内容
awk 'NR ~/5$/{print NR,$0}' /etc/passwd
7.用ifconfig/ip add只显踪ip
ip a |egrep -o '[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}/[0-9]{2}'
8.ifconfig命令后使用awk显示ens33的入站流量和出站流量(字节)
ifconfig ens33|egrep "RX packets | TX packets"
ifconfig |egrep -A8 '^ens33' |awk '/RX p/ || /TX p/{print $1,$5}'
9.使用awk命令统计以r开头的用户数目,显示如下效果
awk 'BEGIN{num=0;print "####start#######"}$1 ~/^r/ {print num++,$1}END{print"数目:"num}' /etc/passwd
10.显示每隔2秒的流量的变化
watch -n 2 -d "ifconfig|awk 'NR==6{print \$5}'"
watch -n 2 -d "ifconfig |egrep -A8 '^ens33' |awk '/RX p/ || /TX p/{print \$5}'"
11.统计/etc/passwd文件里以岍头的用户的数量,并且显示出驴名
awk -F: 'BEGIN{num=0;print "####start#######"}$1 ~/^r/ {print num++,$1}END{print"数目:"num,"用户名:"$1}' /etc/passwd