一些经典例题

例 1:使用 awk 求第二列的平均值

less test.log | awk '{a[$1]+=$2;b[$1]++} END{for(key in a) print key,a[key]/b[key]}'

例 2:打印 9 * 9 乘法表

seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

例 3:找一天之内的一个文件并拷贝到某个地方

find /home -name test -type d -mtime -1 -exec cp -r {} /tmp/ \;

例 4:打印奇数行或者偶数行

# 打印奇数行
seq 10 | awk 'i=!i'
seq 10 | awk 'NR%2==1'
seq 10 | sed '1~2p'

# 打印偶数行
seq 10 | awk '!(i=!i)'
seq 10 | awk -v 'i=1' 'i=!i'
seq 10 | awk 'NR%2==2'
seq 10 | sed '2~2p'

例 5:使用 awk 展现某个进程 tcp 和 mem 在 10s 内的平均占用率

top -p [pid] -n 10 -d 1 -b | grep '关键字' | awk -v"OFS=\t" 'BEGIN{print "CPU%","MEM%"} {cpu+=$9;mem+=$10;print $9,$10} END{print "\n"cpu/NR,mem/NR}'

例 6:统计到当前机器有多少到端口号 xxx 的连接

netstat -npt | awk '$4~/.*xxx$/' | wc -l