三剑客awk教程

目录

awk 概述:

命令格式:

awk常见的内建变量:

awk工作流程:

awk基本操作

awk取列

awk行列并合

awk统计功能

BEGIN{}和END{}

BEGIN{}

END{}

awk判断,循环

if判断:

for循环

while循环


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值