awk
$0 表示整行
$1..$n 表示地n列
$NF 表示最后一列
$(NF-1) 表示倒数第二列
| 内置变量 | 说明 |
|---|---|
| $n | 指定分隔符后,当前记录的第几个字段(第几列) |
| $0 | 表示整行 |
| FS | 表示分隔符,默认是空白符 |
| NF(number fields) | 表示字段数 |
| NR(number records) | 表示行数,记录数 |
awk '{print}' a.txt
awk '{print $0}' a.txt
awk '{print $1}' a.txt
awk '{print $NF}' a.txt
awk '{print $(NF-1)}' a.txt
awk '{print $1,$3,$NF}' a.txt
[root@localhost ~]# awk '{print}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
[root@localhost ~]# awk '{print $0}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
[root@localhost ~]# awk '{print $1}' a.txt
a1
b1
c1
[root@localhost ~]# awk '{print $NF}' a.txt
a5
b5
c5
[root@localhost ~]# awk '{print $(NF-1)}' a.txt
a4
b4
c4
[root@localhost ~]# awk '{print $3,$2,$4}' a.txt
a3 a2 a4
b3 b2 b4
c3 c2 c4
[root@localhost ~]# awk '{print $1,$3,$NF}' a.txt
a1 a3 a5
b1 b3 b5
c1 c3 c5
[root@localhost ~]# awk '{print $1"-"$3"-"$NF}' a.txt
a1-a3-a5
b1-b3-b5
c1-c3-c5
外层单引号,内层双引号
内置变量不能加引号
[root@localhost ~]# awk '{print "第二列:"$2,"第三列:"$3}' a.txt
第二列:a2 第三列:a3
第二列:b2 第三列:b3
第二列:c2 第三列:c3
| 参数 | 说明 |
|---|---|
| -F | 指定分隔符 |
| -v | 定义awk变量 |
| -f | 从脚本中读取awk命令 |
打印指定行NR==行号
awk 'NR==2{print}' a.txt
[root@localhost ~]# cat -n a.txt
1 a1 a2 a3 a4 a5
2 b1 b2 b3 b4 b5
3 c1 c2 c3 c4 c5
4 d1 d2 d3 d4 d5
5 e1 e2 e3 e4 e5
[root@localhost ~]# awk 'NR==2{print}' a.txt
b1 b2 b3 b4 b5
输出1-3行
[root@localhost ~]# awk 'NR==1,NR==3{print $0}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
输出行号
[root@localhost ~]# awk '{print NR,$0}' a.txt
1 a1 a2 a3 a4 a5
2 b1 b2 b3 b4 b5
3 c1 c2 c3 c4 c5
4 d1 d2 d3 d4 d5
5 e1 e2 e3 e4 e5
[root@localhost ~]# awk '{print "第"NR"行的内容是:", $0}' a.txt
第1行的内容是: a1 a2 a3 a4 a5
第2行的内容是: b1 b2 b3 b4 b5
第3行的内容是: c1 c2 c3 c4 c5
第4行的内容是: d1 d2 d3 d4 d5
第5行的内容是: e1 e2 e3 e4 e5
输出/etc/passwd中的第一行,倒数第二行和最后一行
[root@localhost ~]# awk -F ':' '{print $1, $(NF-1), $NF}' /etc/passwd
root /root /bin/bash
bin /bin /sbin/nologin
daemon /sbin /sbin/nologin
adm /var/adm /sbin/nologin
lp /var/spool/lpd /sbin/nologin
sync /sbin /bin/sync
shutdown /sbin /sbin/shutdown
halt /sbin /sbin/halt
mail /var/spool/mail /sbin/nologin
operator /root /sbin/nologin
games /usr/games /sbin/nologin
ftp /var/ftp /sbin/nologin
nobody / /sbin/nologin
systemd-network / /sbin/nologin
dbus / /sbin/nologin
polkitd / /sbin/nologin
sshd /var/empty/sshd /sbin/nologin
postfix /var/spool/postfix /sbin/nologin
chrony /var/lib/chrony /sbin/nologin
www /home/www /bin/bash
saslauth /run/saslauthd /sbin/nologin
nginx /var/lib/nginx /sbin/nologin
综合
[root@localhost ~]# cat -n a.txt
1 a1 a2 a3 a4 a5
2 b1 b2 b3 b4 b5
3 c1 c2 c3 c4 c5
4 d1 d2 d3 d4 d5
5 e1 e2 e3 e4 e5
[root@localhost ~]# awk '{print "当前行号:"NR,"总列数:"NF,"当前行号对应的数据"$NR,"最后一列的值:"$NF,"每一行数据:"$0}' a.txt
当前行号:1 总列数:5 当前行号对应的数据a1 最后一列的值:a5 每一行数据:a1 a2 a3 a4 a5
当前行号:2 总列数:5 当前行号对应的数据b2 最后一列的值:b5 每一行数据:b1 b2 b3 b4 b5
当前行号:3 总列数:5 当前行号对应的数据c3 最后一列的值:c5 每一行数据:c1 c2 c3 c4 c5
当前行号:4 总列数:5 当前行号对应的数据d4 最后一列的值:d5 每一行数据:d1 d2 d3 d4 d5
当前行号:5 总列数:5 当前行号对应的数据e5 最后一列的值:e5 每一行数据:e1 e2 e3 e4 e5
取出IP地址
[root@localhost ~]# ifconfig ens192
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.101.28 netmask 255.255.255.0 broadcast 192.168.101.255
inet6 fe80::63:e6ca:7f02:b13f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b8:40:f2 txqueuelen 1000 (Ethernet)
RX packets 73649 bytes 160014360 (152.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 58242 bytes 11288931 (10.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig ens192 | awk 'NR==2{print $2}'
192.168.101.28
分隔符(输入分隔符)
默认输入分隔符是空白符
可以通过参数 -F 来指定分隔符
或者使用 -v FS='xx' 来修改默认分隔符
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
/sbin/nologin
[root@localhost ~]# awk -v FS=':' '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
www
saslauth
nginx
分隔符(输出分隔符)
默认输出分隔符是空白符,且需要你手动置顶逗号才会以空格隔开
使用-v OFS='xx' 来指定默认分隔符
[root@localhost ~]# awk -v FS=':' -v OFS='===' '{print $1,$NF}' /etc/passwd
root===/bin/bash
bin===/sbin/nologin
daemon===/sbin/nologin
adm===/sbin/nologin
lp===/sbin/nologin
sync===/bin/sync
shutdown===/sbin/shutdown
halt===/sbin/halt
mail===/sbin/nologin
operator===/sbin/nologin
games===/sbin/nologin
ftp===/sbin/nologin
nobody===/sbin/nologin
systemd-network===/sbin/nologin
dbus===/sbin/nologin
polkitd===/sbin/nologin
sshd===/sbin/nologin
postfix===/sbin/nologin
chrony===/sbin/nologin
www===/bin/bash
saslauth===/sbin/nologin
nginx===/sbin/nologin
[root@localhost ~]# awk -v FS=':' -v OFS='\t' '{print $1,$NF}' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
chrony /sbin/nologin
www /bin/bash
saslauth /sbin/nologin
nginx /sbin/nologin
当然你也可以写一些填充字符来实现一样的效果
[root@localhost ~]# awk -v FS=':' '{print $1"==="$NF}' /etc/passwd
root===/bin/bash
bin===/sbin/nologin
daemon===/sbin/nologin
adm===/sbin/nologin
lp===/sbin/nologin
sync===/bin/sync
shutdown===/sbin/shutdown
halt===/sbin/halt
mail===/sbin/nologin
operator===/sbin/nologin
games===/sbin/nologin
ftp===/sbin/nologin
nobody===/sbin/nologin
systemd-network===/sbin/nologin
dbus===/sbin/nologin
polkitd===/sbin/nologin
sshd===/sbin/nologin
postfix===/sbin/nologin
chrony===/sbin/nologin
www===/bin/bash
saslauth===/sbin/nologin
nginx===/sbin/nologin
内置变量
| 内置变量 | 说明 |
|---|---|
| FS | 输入字段分隔符,默认为空白符 |
| OFS | 输出字段分隔符,默认为空白符 |
| RS | 输入记录的换行符 |
| ORS | 输出记录的换行符 |
| NF | 当前行的字段数 |
| NR | 当前行号 |
| FNR | 多个文件时,分别计数 |
| FILENAME | 文件名 |
| ARGC | 命令行参数的个数 |
| ARGV | 命令行参数数组 |
处理多个文件显示行号
NR
[root@localhost ~]# awk '{print "行号:"NR,"文件名:"FILENAME,$0}' /etc/passwd a.txt
行号:1 文件名:/etc/passwd root:x:0:0:root:/root:/bin/bash
行号:2 文件名:/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
行号:3 文件名:/etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin
行号:4 文件名:/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin
行号:5 文件名:/etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
行号:6 文件名:/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync
行号:7 文件名:/etc/passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
行号:8 文件名:/etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
行号:9 文件名:/etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
行号:10 文件名:/etc/passwd operator:x:11:0:operator:/root:/sbin/nologin
行号:11 文件名:/etc/passwd games:x:12:100:games:/usr/games:/sbin/nologin
行号:12 文件名:/etc/passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
行号:13 文件名:/etc/passwd nobody:x:99:99:Nobody:/:/sbin/nologin
行号:14 文件名:/etc/passwd systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
行号:15 文件名:/etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin
行号:16 文件名:/etc/passwd polkitd:x:999:998:User for polkitd:/:/sbin/nologin
行号:17 文件名:/etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
行号:18 文件名:/etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin
行号:19 文件名:/etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin
行号:20 文件名:/etc/passwd www:x:1000:1000::/home/www:/bin/bash
行号:21 文件名:/etc/passwd saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
行号:22 文件名:/etc/passwd nginx:x:996:995:Nginx web server:/var/lib/nginx:/sbin/nologin
行号:23 文件名:a.txt a1 a2 a3 a4 a5
行号:24 文件名:a.txt b1 b2 b3 b4 b5
行号:25 文件名:a.txt c1 c2 c3 c4 c5
行号:26 文件名:a.txt d1 d2 d3 d4 d5
行号:27 文件名:a.txt e1 e2 e3 e4 e5
FNR
[root@localhost ~]# awk '{print "行号:"FNR,"文件名:"FILENAME,$0}' /etc/passwd a.txt
行号:1 文件名:/etc/passwd root:x:0:0:root:/root:/bin/bash
行号:2 文件名:/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
行号:3 文件名:/etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin
行号:4 文件名:/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin
行号:5 文件名:/etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
行号:6 文件名:/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync
行号:7 文件名:/etc/passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
行号:8 文件名:/etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
行号:9 文件名:/etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
行号:10 文件名:/etc/passwd operator:x:11:0:operator:/root:/sbin/nologin
行号:11 文件名:/etc/passwd games:x:12:100:games:/usr/games:/sbin/nologin
行号:12 文件名:/etc/passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
行号:13 文件名:/etc/passwd nobody:x:99:99:Nobody:/:/sbin/nologin
行号:14 文件名:/etc/passwd systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
行号:15 文件名:/etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin
行号:16 文件名:/etc/passwd polkitd:x:999:998:User for polkitd:/:/sbin/nologin
行号:17 文件名:/etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
行号:18 文件名:/etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin
行号:19 文件名:/etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin
行号:20 文件名:/etc/passwd www:x:1000:1000::/home/www:/bin/bash
行号:21 文件名:/etc/passwd saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
行号:22 文件名:/etc/passwd nginx:x:996:995:Nginx web server:/var/lib/nginx:/sbin/nologin
行号:1 文件名:a.txt a1 a2 a3 a4 a5
行号:2 文件名:a.txt b1 b2 b3 b4 b5
行号:3 文件名:a.txt c1 c2 c3 c4 c5
行号:4 文件名:a.txt d1 d2 d3 d4 d5
行号:5 文件名:a.txt e1 e2 e3 e4 e5
RS 指定输入记录分隔符
[root@localhost ~]# cat b.txt
hello world
welcome to hangzhou
[root@localhost ~]# awk -v RS=" " '{print NR,$0}' b.txt
1 hello
2 world
welcome
3 to
4 hangzhou
ORS 指定输出记录分隔符
[root@localhost ~]# awk -v ORS="@@@" '{print NR,$0}' b.txt
1 hello world@@@2 welcome to hangzhou@@@
萨瓦迪卡
[root@localhost ~]# awk 'BEGIN{print "我是真牛逼"} {print $0, ARGC, ARGV[0], ARGV[1], ARGV[2]}' a.txt b.txt
我是真牛逼
a1 a2 a3 a4 a5 3 awk a.txt b.txt
b1 b2 b3 b4 b5 3 awk a.txt b.txt
c1 c2 c3 c4 c5 3 awk a.txt b.txt
d1 d2 d3 d4 d5 3 awk a.txt b.txt
e1 e2 e3 e4 e5 3 awk a.txt b.txt
hello world 3 awk a.txt b.txt
welcome to hangzhou 3 awk a.txt b.txt
自定义变量
[root@localhost ~]# awk -v myname='王哈哈' 'BEGIN{print "俺的名字是:",myname}'
俺的名字是: 王哈哈
引用shell变量
[root@localhost ~]# passwd=111111
[root@localhost ~]# awk -v pa=$passwd 'BEGIN{print pa}'
111111
printf
%c 显示字符的ASCII码
%d , %i 十进制整数
%e , %E 科学计数法显示数值
%f 显示浮点数
%g , %G 以科学计数法的格式或浮点数的格式显示值
%s 显示字符串
%u 无符号整数
%% 显示% 号本身
- 左对齐,默认是右对齐
+ 显示数值符号
[root@localhost ~]# awk '{printf "%s", $0}' a.txt
a1 a2 a3 a4 a5b1 b2 b3 b4 b5c1 c2 c3 c4 c5d1 d2 d3 d4 d5e1 e2 e3 e4 e5
[root@localhost ~]# awk '{printf "%s\n", $0}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
d1 d2 d3 d4 d5
e1 e2 e3 e4 e5
[root@localhost ~]# awk 'BEGIN{printf "%d%d%d%d%d\n", 1,3,5,2,3}' a.txt
13523
[root@localhost ~]# awk 'BEGIN{printf "%d-%d|%d@@%d---%d\n", 1,3,5,2,3}' a.txt
1-3|5@@2---3
[root@localhost ~]# awk '{printf "第一列:%s 第二列:%s 第三列:%s\n", $1, $2, $3}' a.txt
第一列:a1 第二列:a2 第三列:a3
第一列:b1 第二列:b2 第三列:b3
第一列:c1 第二列:c2 第三列:c3
第一列:d1 第二列:d2 第三列:d3
第一列:e1 第二列:e2 第三列:e3
以表格形式展示
- 代表左对齐
\t 代表制表符,也就是4个空格
%-25s -左对齐,25个字符长度
[root@localhost ~]# awk -F ':' 'BEGIN{printf "%-25s\t %-25s\n %-25s\t %-25s\t", "用户名","UID", "GID", "用户登录的shell"} {printf "%-25s\t %-25s\t %-25s\t %-25s\n", $1, $3, $4,$NF}' /etc/passwd
用户名 UID
GID 用户登录的shell root 0 0 /bin/bash
bin 1 1 /sbin/nologin
daemon 2 2 /sbin/nologin
adm 3 4 /sbin/nologin
lp 4 7 /sbin/nologin
sync 5 0 /bin/sync
shutdown 6 0 /sbin/shutdown
halt 7 0 /sbin/halt
mail 8 12 /sbin/nologin
operator 11 0 /sbin/nologin
games 12 100 /sbin/nologin
ftp 14 50 /sbin/nologin
nobody 99 99 /sbin/nologin
systemd-network 192 192 /sbin/nologin
dbus 81 81 /sbin/nologin
polkitd 999 998 /sbin/nologin
sshd 74 74 /sbin/nologin
postfix 89 89 /sbin/nologin
chrony 998 996 /sbin/nologin
www 1000 1000 /bin/bash
saslauth 997 76 /sbin/nologin
nginx 996 995 /sbin/nologin
awk模式, 条件
BEGIN
处理文本前需要执行的操作
END
处理完所有行之后的操作
[root@localhost ~]# awk 'BEGIN{print "处理之前"} {print $0} END{print "处理之后"}' a.txt
处理之前
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
d1 d2 d3 d4 d5
e1 e2 e3 e4 e5
处理之后
行号等于4
[root@localhost ~]# awk 'NR==4{print $0}' a.txt
d1 d2 d3 d4 d5
行号小于3
[root@localhost ~]# awk 'NR<3{print $0}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
行号大于等于3
[root@localhost ~]# awk 'NR>=3{print NR,$0}' a.txt
3 c1 c2 c3 c4 c5
4 d1 d2 d3 d4 d5
5 e1 e2 e3 e4 e5
行号不等于3
[root@localhost ~]# awk 'NR!=3{print NR,$0}' a.txt
1 a1 a2 a3 a4 a5
2 b1 b2 b3 b4 b5
4 d1 d2 d3 d4 d5
5 e1 e2 e3 e4 e5
awk与正则
awk '/正则/动作' xxx
[root@localhost ~]# awk -F ':' '/^root/{print $1, $NF}' /etc/passwd
root /bin/bash
找出所有不能登录的用户 /sbin/nologin
/ 要使用\/ 进行转义
[root@localhost ~]# awk '/\/sbin\/nologin$/{print $0}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
nginx:x:996:995:Nginx web server:/var/lib/nginx:/sbin/nologin
格式化
[root@localhost ~]# awk -F ":" 'BEGIN{printf "%-25s\t %-25s\t %-25s\n", "用户名", "家目录", "登录shell"} /\/sbin\/nologin$/{printf "%-25s\t %-25s\t %-25s\n", $1, $(NF-1), $NF}' /etc/passwd
用户名 家目录 登录shell
bin /bin /sbin/nologin
daemon /sbin /sbin/nologin
adm /var/adm /sbin/nologin
lp /var/spool/lpd /sbin/nologin
mail /var/spool/mail /sbin/nologin
operator /root /sbin/nologin
games /usr/games /sbin/nologin
ftp /var/ftp /sbin/nologin
nobody / /sbin/nologin
systemd-network / /sbin/nologin
dbus / /sbin/nologin
polkitd / /sbin/nologin
sshd /var/empty/sshd /sbin/nologin
postfix /var/spool/postfix /sbin/nologin
chrony /var/lib/chrony /sbin/nologin
saslauth /run/saslauthd /sbin/nologin
nginx /var/lib/nginx /sbin/nologin
查询正则区间
查询a1 开头到c5 结尾之前的内容
[root@localhost ~]# awk '/^a1/,/c5$/{print $0}' a.txt
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
查看nginx日志
[root@localhost nginx]# awk '{print $1, $9, $6, $4, $(NF-1), $7}' /var/log/nginx/access.log
192.168.248.90 404 "GET [16/Oct/2020:08:39:27 Safari/537.36" /zabbix
192.168.248.90 200 "GET [16/Oct/2020:08:39:27 Safari/537.36" /nginx-logo.png
192.168.248.90 200 "GET [16/Oct/2020:08:39:27 Safari/537.36" /poweredby.png
192.168.248.90 404 "GET [16/Oct/2020:08:39:27 Safari/537.36" /favicon.ico
192.168.248.90 200 "GET [16/Oct/2020:08:39:29 Safari/537.36" /
192.168.248.90 200 "GET [16/Oct/2020:08:39:29 Safari/537.36" /img/centos-logo.png
192.168.248.90 200 "GET [16/Oct/2020:08:39:29 Safari/537.36" /img/html-background.png
192.168.248.90 200 "GET [16/Oct/2020:08:39:29 Safari/537.36" /img/header-background.png
192.168.248.90 304 "GET [16/Oct/2020:08:39:31 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:31 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
192.168.248.90 304 "GET [16/Oct/2020:08:39:32 Safari/537.36" /
排序后查不重复的IP
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | sort -n | uniq
192.168.101.28
192.168.248.90
不同ip的有多少个
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | sort -n | uniq | wc -l
2
访问次数
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | uniq -c
16 192.168.248.90
1 192.168.101.28
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | uniq -c | sort -n
1 192.168.101.28
16 192.168.248.90
倒序
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | uniq -c | sort -nr
16 192.168.248.90
1 192.168.101.28
查前10行
[root@localhost nginx]# awk '{print $1}' /var/log/nginx/access.log | uniq -c | sort -nr | head -n 10
16 192.168.248.90
1 192.168.101.28