1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| // 移除指定文件中重复的行并显示出来
$ awk '!($0 in array) { array[$0]; print }' a.txt
// 将 uid 和 gid 相同的行显示出来
$ awk -F ':' '$3==$4' /etc/passwd
// 准备要操作的数据
$ netstat -atlnpe > netstat.log
// 输出三列(1,4,9)
$ awk '{print $1, $4, $9}' netstat.log
// 格式化输出
$ awk '{printf "%-8s %-8s %-8s %-25s %-25s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.log
// 仅显示第 3 列的值为 0 && 第 6 列的值为 LISTE
$ awk '$3==0 && $6=="LISTEN"' netstat.log
// 仅显示第 3 列的值为 0 && 第 6 列的值为 LISTE, 同时把表头也显示出来
$ awk '$3==0 && $6=="LISTEN" || NR==2' netstat.log
// 仅显示第 3 列的值为 0 && 第 6 列的值为 LISTE, 同时把表头也显示出来, 并且格式化输出三列(4, 5, 6)
$ awk '$3==0 && $6=="LISTEN" || NR==2 {printf "%-20s %-20s %s\n", $4 , $5, $6}' netstat.log
// 仅显示第 3 列的值为 0 && 第 6 列的值为 ESTABLISHED, 同时把表头也显示出来, 并且格式化输出三列(4, 5, 6)
$ awk '$3==0 && $6=="ESTABLISHED" || NR==2 {printf "%02s %s %-20s %-20s %s\n", NR, FNR, $4, $5, $6}' netstat.log
// 指定分隔符
$ awk 'BEGIN{FS=":"} {print $1, $3, $6}' /etc/passwd
或者
$ awk -F: '{print $1, $3, $6}' /etc/passwd
// -t 作为分隔符
$ awk -F: '{print $1, $3, $6}' OFS="\t" /etc/passwd
// 匹配 LISTEN
$ awk '$6 ~ /LISTEN/ || NR==2 {print NR, $4, $5, $6}' OFS="\t" netstat.log
或者
$ awk '/LISTEN/' netstat.log
// 匹配 ESTABLISHED
$ awk '$6 ~ /ESTABLISHED/ || NR==2 {print NR, $4, $5, $6}' OFS="\t" netstat.log
// 匹配 ESTABLISHED 取反
$ awk '$6 !~ /ESTABLISHED/ || NR==2 {print NR, $4, $5, $6}' OFS="\t" netstat.log
或者
$ awk '!/ESTABLISHED/' netstat.log
// 拆分文件
$ awk 'NR!=1 && NR!=2 {print > $6}' netstat.log
// 判断匹配拆分文件
$ awk 'NR!=1 { if ($6 ~ /TIME|ESTABLISHED/) print > "1.log"; else if ($6 ~ /LISTEN/) print > "2.log"; else print > "3.log" }' netstat.log
// 求 *.php *.js 文件大小总和
$ ls -l *.php *.js | awk '{sum+=$5} END {print sum}'
// 统计每个用户的进程的占了多少内存
$ ps aux | awk 'NR!=1 {a[$1]+=$6;} END { for(i in a) print i ": " a[i]" KB"; }'
// 从文件中找出长度大于 80 的行
$ awk 'length>80' /etc/php.ini
// 按连接数查看客户端 IP
$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
// 打印九九乘法表
$ 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") }'
|