三剑客(awk)篇

203 阅读6分钟

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