目录
awk 概述:
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
命令格式:
awk 选项 ‘条件 {动作}’ 文件
awk常见的内建变量:
FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
awk工作流程:
AWK 工作流程可分为三个部分:
- 读输入文件之前执行的代码段(由BEGIN关键字标识)。
- 主循环执行输入文件的代码段。
- 读输入文件之后的代码段(由END关键字标识)。
awk基本操作
以/etc/passwd为例
案例一:取出第2行
awk 'NR==2' /etc/passwd
awk '条件' 文件
[root@filebest ~]# awk 'NR==2' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
案例二:取出包含sync或halt的行
awk '/sync|halt/' /etc/passwd
awk '/条件|条件/' 文件
[root@filebest ~]# awk '/sync|halt/' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
案例三:取出第三行到第五行的内容
awk 'NR>=2 && NR <=5' /etc/passwd
awk '条件 && 条件' 文件
[root@filebest ~]# awk 'NR>=2 && NR <=5' /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
案例四:取出第二十行到最后一行的内容
[root@filebest ~]# awk 'NR>=20' /etc/passwd
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
案例五:取出从包含sync的行到包含halt的行
awk '/sync/,/halt/' /etc/passwd
awk '/条件/ , /条件/' 文件
[root@filebest ~]# awk '/sync/,/halt/' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
awk取列
格式:awk '{print $数字}'
awk在取列的时候,默认以空格为分隔符,如果分隔符不是空格,则需要添加选项-F来指定分隔符
案例一:取出ls -lh 命令中的第一列和第三列
ls -lh |awk '{print $1,$3}'
[root@filebest ~]# ls -lh |awk '{print $1,$3}'
总用量
-rw-r--r-- root
-rw-------. root
-rw-rw-rw- root
案例二:查看所有内容并显示行号
awk '{print NR ,$0}' /etc/passwd
[root@filebest ~]# awk '{print NR ,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18 abrt:x:173:173::/etc/abrt:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
21 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
22 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
23 chrony:x:997:995::/var/lib/chrony:/sbin/nologin
24 ntp:x:38:38::/etc/ntp:/sbin/nologin
25 tcpdump:x:72:72::/:/sbin/nologin
26 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
案例三:取出/etc/passwd中的第一列和第三列
awk -F: '{print $1 ,$3}' /etc/passwd |column -t
column -t 是对齐如果不对齐就是下面这样
awk -F: '{print $1 ,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
libstoragemgmt 998
abrt 173
rpc 32
tss 59
sshd 74
postfix 89
chrony 997
ntp 38
tcpdump 72
apache 48
对齐的话是这样的
awk -F: '{print $1 ,$3}' /etc/passwd |column -t
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
libstoragemgmt 998
abrt 173
rpc 32
tss 59
sshd 74
postfix 89
chrony 997
ntp 38
tcpdump 72
apache 48
案例四:取出ip.txt中的192.168.100.6(awk中指定多个分割符)
首先创建ip.txt
echo ' inet 192.168.100.6/24 brd 192.168.100.255 scope global noprefixroute ens33' > ip.tx
t
#对于初学者建议一步一步来,大不了多写几个|
#先读取第二列,在指定分割符读取第一列
[root@filebest ~]# awk '{print $2}' ip.txt |awk -F / '{print $1}'
192.168.100.6
#如果可以理解上边的命令,就可以这里要说的awk中指定多个分隔符
[root@filebest ~]# awk -F'inet | /24' '{print $2}' ip.txt
192.168.100.6
#指定多个分割符就是在设置分隔符时,使用正则表达式定义多个分隔符
awk -F'inet |/24' '{print $2}' ip.txt
[root@filebest ~]# awk -F'inet |/24' '{print $2}' ip.txt
192.168.100.6
#以空格和/为分隔符
awk -F '[ /]' '{print $7}' ip.txt
[root@filebest ~]# awk -F '[ /]' '{print $7}' ip.txt
192.168.100.6
################################################################################
awk -F '[ /]+' '{print $3}' ip.txt #+去除重复
[root@filebest ~]# awk -F '[ /]+' '{print $3}' ip.txt
192.168.100.6
案例五:取出/etc/passwd中第一列,第三列和最后一列并对齐
awk -F: '{print $1,$3,$NF}' /etc/passwd |column -t
[root@filebest ~]# awk -F: '{print $1,$3,$NF}' /etc/passwd |column -t
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
sync 5 /bin/sync
shutdown 6 /sbin/shutdown
halt 7 /sbin/halt
mail 8 /sbin/nologin
operator 11 /sbin/nologin
games 12 /sbin/nologin
ftp 14 /sbin/nologin
nobody 99 /sbin/nologin
systemd-network 192 /sbin/nologin
dbus 81 /sbin/nologin
polkitd 999 /sbin/nologin
libstoragemgmt 998 /sbin/nologin
abrt 173 /sbin/nologin
rpc 32 /sbin/nologin
tss 59 /sbin/nologin
sshd 74 /sbin/nologin
postfix 89 /sbin/nologin
chrony 997 /sbin/nologin
ntp 38 /sbin/nologin
tcpdump 72 /sbin/nologin
apache 48 /sbin/nologin
awk行列并合
案例一:过滤出 /etc/passwd中第三列包含1和2的行
awk -F: '$3 ~ /[12]/' /etc/passwd
[root@filebest ~]# awk -F: '$3 ~ /[12]/' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
案例二:过滤出/etc/passwd中第三列以1,2打头的行
awk -F: '$3 ~ /^[12]/' /etc/passwd
[root@filebest ~]# awk -F: '$3 ~ /^[12]/' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
案例三: 过滤出/etc/passwd中第三列不包含1和2的行
awk -F: '$3 !~ /[12]/' /etc/passwd
[root@filebest ~]# awk -F: '$3 !~ /[12]/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
案例四:过滤出passwd中第三列以0-3结尾的,显示第一列和第三列
awk -F: '$3 ~ /[0-3]$/{print $1,$3}' /etc/passwd
[root@filebest ~]# awk -F: '$3 ~ /[0-3]$/{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
operator 11
games 12
systemd-network 192
dbus 81
abrt 173
rpc 32
tcpdump 72
案例五:过滤出passwd中第三列大于零小于100的内容,显示其第一列和第三列
awk -F: '$3 >0 && $3<100 {print $1,$3}' /etc/passwd |column -t
[root@filebest ~]# awk -F: '$3 >0 && $3<100 {print $1,$3}' /etc/passwd |column -t
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
dbus 81
rpc 32
tss 59
sshd 74
postfix 89
ntp 38
tcpdump 72
apache 48
案例六:过滤出网卡配置文件中的ip地址
#如果不知道网卡配置,可以先cat /etc/sysconfig/network-scripts/ifcfg-ens33查看想要过滤的内容
#没有条件,只需要过滤ip地址
#我的配置文件是
[root@filebest ~]# cat -n /etc/sysconfig/network-scripts/ifcfg-ens33
1 TYPE=Ethernet
2 PROXY_METHOD=none
3 BROWSER_ONLY=no
4 BOOTPROTO=static
5 DEFROUTE=yes
6 IPV4_FAILURE_FATAL=no
7 IPV6INIT=yes
8 IPV6_AUTOCONF=yes
9 IPV6_DEFROUTE=yes
10 IPV6_FAILURE_FATAL=no
11 IPV6_ADDR_GEN_MODE=stable-privacy
12 NAME=ens33
13 DEVICE=ens33
14 ONBOOT=yes
15 IPADDR=192.168.100.6
16 netmask=255.255.255.0
#过滤ip思路
#先过滤包含IPADDR的行,在以=为分割符,输出第二段
awk -F= '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@filebest ~]# awk -F= '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33
192.168.100.6
#也可以通过行号查看
awk -F= 'NR==15{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@filebest ~]# awk -F= 'NR==15{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33
192.168.100.6
案例七:过滤出ens33的ip地址
ip a s ens33 |awk -F'inet |/' '/inet /{print $2}'
[root@filebest ~]# ip a s ens33 |awk -F'inet |/' '/inet /{print $2}'
192.168.100.6
awk统计功能
BEGIN{}和END{}
- 是awk中特殊的条件模式
- 这两个条件都与计算相关,常用的是END
特殊条件(模式) | 含义 | 应用场景 |
BEGIN{} | BEGIN{}会在awk读取文件之前执行 | 1、进行实验 2、进行计算,不需要读取内容 3、创建或修改awk变量 |
END{} | END{}会在awk读取文件之后执行 | 1、awk在读取文件的时候进行统计与计算,最红统计完成在END输出最终结果 |
BEGIN{}
例如在BEGIN{}计算1/2
[root@filebest ~]# awk 'BEGIN { print 1/2 }'
0.5
END{}
案例一:统计/etc/passwd的行数
#动作:i++ #统计次数类似于wc -l,i是变量名字随便起
#i++公式全程是i = i+1.最后输出i
awk '{i++} END{print i}' /etc/passwd
[root@filebest ~]# awk '{i++} END{print i}' /etc/passwd
26
等同于wc -l
[root@filebest ~]# wc -l /etc/passwd
26 /etc/passwd
案例二:统计/etc/passwd中不可登录的用户数量
#首先看一下有哪些用户不能登录
awk '/bin\/nologin$/ {print $0}' /etc/passwd
#其中\是转义符
[root@filebest ~]# awk '/bin\/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
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
#进行统计
awk '/bin\/nologin$/ {i++} END{print i}' /etc/passwd
[root@filebest ~]# awk '/bin\/nologin$/ {i++} END{print i}' /etc/passwd
22
#wc -l 验证
[root@filebest ~]# awk '/bin\/nologin$/ {print $0}' /etc/passwd |wc -l
22
案例三:统计/etc/service中空行的数量
awk '/^$/ {i++} END{print i}' /etc/services
[root@filebest ~]# awk '/^$/ {i++} END{print i}' /etc/services
17
案例四:统计流量
假设一个人第一天用了
1g
2g
5g
4g
2g
1g
这么多流量,统计他一共用了多少流量
cat >liuliang.txt <<EOF
> 1g
>
> 2g
>
> 5g
>
> 4g
>
> 2g
>
> 1g
> EOF
awk -Fg '{print $1}' liuliang.txt |awk '{i=i+$1} END{print s}'
#本质上和上面的一样
#刚刚的i++ 等同于i=i+1
#这里将1替换成$1的数,就是求和了
[root@filebest ~]# awk -Fg '{print $1}' liuliang.txt |awk '{s=s+$1} END{print s}'
15
案例五:生产工作案例,统计access.log中一共用了多少流量
#内容是
192.168.100.4 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.2 - - [07/Apr/2023:08:33:36 +0800] "GET /test7.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.6 - - [07/Apr/2023:08:33:36 +0800] "GET /test8.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.7 - - [07/Apr/2023:08:33:36 +0800] "GET /test15.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.42 - - [07/Apr/2023:08:33:36 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.124 - - [07/Apr/2023:08:33:36 +0800] "GET /test7.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test8.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.45 - - [07/Apr/2023:08:33:36 +0800] "GET /test2.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test15.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.12 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.87 - - [07/Apr/2023:08:33:36 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.75 - - [07/Apr/2023:08:33:36 +0800] "GET /test12.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.178 - - [07/Apr/2023:08:33:36 +0800] "GET /test9.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.196 - - [07/Apr/2023:08:33:36 +0800] "GET /test13.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.215 - - [07/Apr/2023:08:33:36 +0800] "GET /test16.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.154 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.124 - - [07/Apr/2023:08:33:36 +0800] "GET /test12.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:32 +0800] "GET /test3.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:32 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
#统计流量
awk '{i=i+$10} END{print i}' access_log
[root@filebest ~]# awk '{i=i+$10} END{print i}' access_log
251
#最后结果的单位是字节,字节如果想到kb那就
awk '{i=i+$10} END{print i/1024}' access_log
#kb想到MB那就在/1024以此类推
awk '{i=i+$10} END{print i/1024/1024}' access_log
#或者写
awk '{i=i+$10} END{print i/1024^2}' access_log
[root@filebest ~]# awk '{i=i+$10} END{print i/1024/1024}' access_log
0.000239372
[root@filebest ~]# awk '{i=i+$10} END{print i/1024^2}' access_log
0.000239372
#Gb就是i/1024^3
#TB就是i/1024^4
awk判断,循环
if判断:
格式:
if(){} : 单分支
if(){}else{} : 双分支
if(){}else if(){}else{} : 多分支
案例一:判断/etc/passwd文件中第三列大于第四列输出大于,第三列小于第四列输出小于,否则输出相等
awk -F: '{if($3>$4){print "大于"}else if($3<$4){print "小于"}else{print "等于"}}' /etc/passwd
awk -F: '{if($3>$4){print "大于"}else if($3<$4){print "小于"}else{print "等于"}}' /etc/passwd
等于
等于
等于
小于
小于
大于
大于
大于
小于
大于
小于
小于
等于
等于
等于
大于
大于
等于
等于
等于
等于
等于
大于
等于
等于
等于
案例二:if判断打印隔五一行线
awk '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd
[root@filebest ~]# awk '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
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
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
----------------
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
----------------
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
for循环
将/etc/passwd每一行打印两次
awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd
[root@filebest ~]# awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
while循环
将/etc/passwd每一行打印两次
awk -F: '{i=0;while(i<2) {print $0,i++}}' /etc/passwd
[root@filebest ~]# awk -F: '{i=0;while(i<2) {print $0,i++}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin