六周第三次課

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

六周第三次課

?9.6/9.7 awk?

awk也是流式編輯器,針對文檔中的行來操作,一行一行地執行。

?

awk比sed更強大的功能是它支持了分段。

-F選項的作用是指定分隔符,如果不加-F選項,則以空格或者tab為分隔符。print為打印的動作,用來打印某個字段。$1為第一個字段,$2為第二個字段,依此類推。但$0比較特殊,它表示整行。

下面以:為分隔符,打印test.txt文件的第一段。

?

[root@localhost awk]# awk -F ':' '{print $1}' test.txt?
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
ods
pegasus
systemd-network
dbus
polkitd
apache
tomcat
colord
abrt
saslauth
libstoragemgmt
dirsrv
rpc
hsqldb
unbound
amandabackup
pkiuser
setroubleshoot
postfix
rtkit
pulse
qemu
ntp
radvd
chrony
named
mysql
tss
usbmuxd
geoclue
sssd
gdm
rpcuser
nfsnobody
pcp
kdcproxy
ipaapi
gnome-initial-setup
avahi
postgres
dovecot
dovenull
sshd
oprofile
tcpdump
tianqi
aming
user1
[root@localhost awk]#?

這種打印也不是刪除文本的某些段,相當于sed不加-i選項的作用,下面打印test.txtt的所有段。

[root@localhost awk]# awk -F ':' '{print $0}' test.txt?
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
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:386:384::/var/lib/chrony:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:384:381:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

?

awk可以直接打印全部文本。

[root@localhost awk]# awk '{print $0}' test.txt?
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
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:386:384::/var/lib/chrony:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:384:381:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

注意:awk的格式,-F后面緊跟單引號,單引號里面為分隔符。print動作要用{}括起來,否則會報錯。

print可以打印自定義內容,但是自定義的內容要用“”括起來。

下面創建一下測試的文件。

[root@localhost awk]# vim 1.txt

1 2
aa bb
dd ee

保存,退出。

[root@localhost awk]# awk '{print $1}' 1.txt
1
aa
dd
[root@localhost awk]# cat 1.txt?
1 2
aa bb
dd ee
[root@localhost awk]#?

下面以:為分隔符,打印test.txt文件的第1,3,4段。

[root@localhost awk]# awk -F ':' '{print $1,$3,$4}' test.txt?
root 0 0
bin 1 1
daemon 2 2
adm 3 4
lp 4 7
sync 5 0
shutdown 6 0
halt 7 0
mail 8 12
operator 11 0
games 12 100
ftp 14 50
nobody 99 99
ods 999 998
pegasus 66 65
systemd-network 192 192
dbus 81 81
polkitd 998 996
apache 48 48
tomcat 91 91
colord 997 994
abrt 173 173
saslauth 996 76
libstoragemgmt 995 993
dirsrv 389 389
rpc 32 32
hsqldb 96 96
unbound 388 388
amandabackup 33 6
pkiuser 17 17
setroubleshoot 387 387
postfix 89 89
rtkit 172 172
pulse 171 171
qemu 107 107
ntp 38 38
radvd 75 75
chrony 386 384
named 25 25
mysql 27 27
tss 59 59
usbmuxd 113 113
geoclue 385 382
sssd 384 381
gdm 42 42
rpcuser 29 29
nfsnobody 65534 65534
pcp 383 380
kdcproxy 382 379
ipaapi 381 378
gnome-initial-setup 380 377
avahi 70 70
postgres 26 26
dovecot 97 97
dovenull 379 376
sshd 74 74
oprofile 16 16
tcpdump 72 72
tianqi 1000 1000
aming 1001 1001
user1 1002 1002
[root@localhost awk]#

[root@localhost awk]# awk -F ':' '{print $1"#"$3"#"$4}' test.txt?
root#0#0
bin#1#1
daemon#2#2
adm#3#4
lp#4#7
sync#5#0
shutdown#6#0
halt#7#0
mail#8#12
operator#11#0
games#12#100
ftp#14#50
nobody#99#99
ods#999#998
pegasus#66#65
systemd-network#192#192
dbus#81#81
polkitd#998#996
apache#48#48
tomcat#91#91
colord#997#994
abrt#173#173
saslauth#996#76
libstoragemgmt#995#993
dirsrv#389#389
rpc#32#32
hsqldb#96#96
unbound#388#388
amandabackup#33#6
pkiuser#17#17
setroubleshoot#387#387
postfix#89#89
rtkit#172#172
pulse#171#171
qemu#107#107
ntp#38#38
radvd#75#75
chrony#386#384
named#25#25
mysql#27#27
tss#59#59
usbmuxd#113#113
geoclue#385#382
sssd#384#381
gdm#42#42
rpcuser#29#29
nfsnobody#65534#65534
pcp#383#380
kdcproxy#382#379
ipaapi#381#378
gnome-initial-setup#380#377
avahi#70#70
postgres#26#26
dovecot#97#97
dovenull#379#376
sshd#74#74
oprofile#16#16
tcpdump#72#72
tianqi#1000#1000
aming#1001#1001
user1#1002#1002
[root@localhost awk]#?

列出匹配oo的段。

[root@localhost awk]# awk '/oo/' test.txt?
root:x:0:0:root:/root:/bin/bash
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
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost awk]#

這跟sed的用法類似,能實現grep的功能,但是沒有顏色顯示,肯定沒有grep用起來方便。

awk可以讓某個段去匹配,~就是匹配的意思。

[root@localhost awk]# awk -F ':' '$1 ~ /oo/' test.txt?
root:x:0:0:root:/root:/bin/bash
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
[root@localhost awk]#?

?

awk支持正則表達式,而且不用加脫義符號。

[root@localhost awk]# awk -F ':' '$1 ~ /o+/' test.txt?
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:386:384::/var/lib/chrony:/sbin/nologin
geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
[root@localhost awk]#?

awk可以進行多次匹配,用:做分隔符,先匹配一項再匹配另外一項。

[root@localhost awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $3,$4}' test.txt?
root 0
operator 11
996 76
389 389
33 6
17 17
107 107
75 75
59 59
113 113
29 29
379 376
16 16
1002 1002
[root@localhost awk]#?

?

[root@localhost awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt?
root 0
operator 11
saslauth 996 76
dirsrv 389 389
amandabackup 33 6
pkiuser 17 17
qemu 107 107
radvd 75 75
tss 59 59
usbmuxd 113 113
rpcuser 29 29
dovenull 379 376
oprofile 16 16
user1 1002 1002
[root@localhost awk]# grep -E 'root|user' test.txt?
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

匹配root或者user的行全部打印出來

[root@localhost awk]# awk -F ':' '/root|user/ {print $0}' test.txt?
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

awk可以用邏輯符號進行判斷,判斷符號有==(精確匹配)、>、>=、<、<=、!=。值得注意的是,在和數字比較時,若把比較的數字用雙引號引起來后,那么awk不會認為是數字,而認為是字符,不加雙引號則認為是數字。

打印第3段(uid)是0的行

?

[root@localhost awk]# awk -F ':' '$3==0' test.txt?
root:x:0:0:root:/root:/bin/bash

匹配第3段(uid)是0的行,并打印這些行的第1段。
[root@localhost awk]# awk -F ':' '$3==0 {print $1}' test.txt?
root

匹配第3段(uid)大于1000的行,并打印這些行的第1段。
[root@localhost awk]# awk -F ':' '$3>=1000 {print $1}' test.txt?
nfsnobody
tianqi
aming
user1
[root@localhost awk]#?

匹配第3段(uid)大于1000的行,并打印這些行.

[root@localhost awk]# awk -F ':' '$3>=1000 {print $0}' test.txt?
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

如果這個1000加上雙引號那么系統就不會把它當成數字,而是當成ACSII碼的方式去計算的,也就是說會認為這個1000是字符串。

[root@localhost awk]# awk -F ':' '$3>="1000" {print $0}' test.txt?
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
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:386:384::/var/lib/chrony:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:384:381:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

列出第7段(不等于)不是/sbin/nologin的行。
[root@localhost awk]# awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt?

root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

!=表示不匹配,它除了針對某一段的字符按進行比較外,還可以在兩個段之間進行邏輯比較。

列出第3段小于第4段的行

?

[root@localhost awk]# awk -F ':' '$3<$4' test.txt?
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost awk]#?

列出第3段等于第4段的行

[root@localhost awk]# awk -F ':' '$3==$4' test.txt?
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/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
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

另外還可以使用 && 和 || 表示 “并且” 和 “或者” 的意思

列出第3段大于5(加雙引號的5算是字符)并且小于7的行。

[root@localhost awk]# awk -F ':' '$3>"5"&&$3<"7"' test.txt?
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@localhost awk]#?

列出第3段大于1000或者第7段是/sbin/nologin的行。

[root@localhost awk]# awk -F ':' '$3>1000 || $7=="/sbin/nologin"' test.txt?
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
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:386:384::/var/lib/chrony:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:384:381:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

列出第3段大于1000或者第7段包含bash的行。

[root@localhost awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt?
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
aming:x:1001:1001::/home/aming:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#?

awk的內置變量

awk常用的變量有:

OFS:和-F選項有類似的功能,也是用來定義分隔符的,但是它在輸出的時候定義。

NF:用分隔符分隔后一共有多少段。

NR:行數。

-F是分段前的分隔符,OFS是用來指定print時候要用到的分隔符。

列出第3段大于1000或者第7段包含bash的行,并打印出這些行的第1,3,7部分,并且以#將這些部分分割開。

[root@localhost awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt?
root#0#/bin/bash
amandabackup#33#/bin/bash
nfsnobody#65534#/sbin/nologin
postgres#26#/bin/bash
tianqi#1000#/bin/bash
aming#1001#/bin/bash
user1#1002#/bin/bash
[root@localhost awk]#?

先寫OFS,再寫條件,再寫print。

不寫條件的話,就是打印所有行的第1,3,7部分。

[root@localhost awk]# awk -F ':' '{OFS="#"} {print $1,$3,$7}' test.txt?
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
ods#999#/sbin/nologin
pegasus#66#/sbin/nologin
systemd-network#192#/sbin/nologin
dbus#81#/sbin/nologin
polkitd#998#/sbin/nologin
apache#48#/sbin/nologin
tomcat#91#/sbin/nologin
colord#997#/sbin/nologin
abrt#173#/sbin/nologin
saslauth#996#/sbin/nologin
libstoragemgmt#995#/sbin/nologin
dirsrv#389#/sbin/nologin
rpc#32#/sbin/nologin
hsqldb#96#/sbin/nologin
unbound#388#/sbin/nologin
amandabackup#33#/bin/bash
pkiuser#17#/sbin/nologin
setroubleshoot#387#/sbin/nologin
postfix#89#/sbin/nologin
rtkit#172#/sbin/nologin
pulse#171#/sbin/nologin
qemu#107#/sbin/nologin
ntp#38#/sbin/nologin
radvd#75#/sbin/nologin
chrony#386#/sbin/nologin
named#25#/sbin/nologin
mysql#27#/sbin/nologin
tss#59#/sbin/nologin
usbmuxd#113#/sbin/nologin
geoclue#385#/sbin/nologin
sssd#384#/sbin/nologin
gdm#42#/sbin/nologin
rpcuser#29#/sbin/nologin
nfsnobody#65534#/sbin/nologin
pcp#383#/sbin/nologin
kdcproxy#382#/sbin/nologin
ipaapi#381#/sbin/nologin
gnome-initial-setup#380#/sbin/nologin
avahi#70#/sbin/nologin
postgres#26#/bin/bash
dovecot#97#/sbin/nologin
dovenull#379#/sbin/nologin
sshd#74#/sbin/nologin
oprofile#16#/sbin/nologin
tcpdump#72#/sbin/nologin
tianqi#1000#/bin/bash
aming#1001#/bin/bash
user1#1002#/bin/bash
[root@localhost awk]#

我們也可以加語句進行修飾,這里就使用到了if。

[root@localhost awk]# awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' test.txt?
nfsnobody#x#65534#65534
aming#x#1001#1001
user1#x#1002#1002
[root@localhost awk]#?

也可以寫成下面的形式,只是有點生硬。

[root@localhost awk]# awk -F ':' '{OFS="#"} $3>1000 {print $1,$2,$3,$4}' test.txt?
nfsnobody#x#65534#65534
aming#x#1001#1001
user1#x#1002#1002
[root@localhost awk]#?

在列出的結果中前面顯示行號加冒號(NR的意思是加行號)。

[root@localhost awk]# awk -F ':' '{print NR":" $0}' test.txt?
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:ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
15:pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
16:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
17:dbus:x:81:81:System message bus:/:/sbin/nologin
18:polkitd:x:998:996:User for polkitd:/:/sbin/nologin
19:apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
20:tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
21:colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
22:abrt:x:173:173::/etc/abrt:/sbin/nologin
23:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
24:libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
25:dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
26:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
27:hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
28:unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
29:amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
30:pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
31:setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
32:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
33:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
34:pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
35:qemu:x:107:107:qemu user:/:/sbin/nologin
36:ntp:x:38:38::/etc/ntp:/sbin/nologin
37:radvd:x:75:75:radvd user:/:/sbin/nologin
38:chrony:x:386:384::/var/lib/chrony:/sbin/nologin
39:named:x:25:25:Named:/var/named:/sbin/nologin
40:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
41:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
42:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
43:geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
44:sssd:x:384:381:User for sssd:/:/sbin/nologin
45:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
46:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
47:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
48:pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
49:kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
50:ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
51:gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
52:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
53:postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
54:dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
55:dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
56:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
57:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
58:tcpdump:x:72:72::/:/sbin/nologin
59:tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
60:aming:x:1001:1001::/home/aming:/bin/bash
61:user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

在列出的結果中前面顯示該行有多少段,加冒號(NF的意思是加段數)。

[root@localhost awk]# awk -F ':' '{print NF":" $0}' test.txt?
7:root:x:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin
7:games:x:12:100:games:/usr/games:/sbin/nologin
7:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7:nobody:x:99:99:Nobody:/:/sbin/nologin
7:ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
7:pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
7:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
7:dbus:x:81:81:System message bus:/:/sbin/nologin
7:polkitd:x:998:996:User for polkitd:/:/sbin/nologin
7:apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
7:tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
7:colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
7:abrt:x:173:173::/etc/abrt:/sbin/nologin
7:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
7:libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
7:dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
7:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
7:hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
7:unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
7:amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
7:pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
7:setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
7:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
7:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
7:pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
7:qemu:x:107:107:qemu user:/:/sbin/nologin
7:ntp:x:38:38::/etc/ntp:/sbin/nologin
7:radvd:x:75:75:radvd user:/:/sbin/nologin
7:chrony:x:386:384::/var/lib/chrony:/sbin/nologin
7:named:x:25:25:Named:/var/named:/sbin/nologin
7:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
7:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
7:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
7:geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
7:sssd:x:384:381:User for sssd:/:/sbin/nologin
7:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
7:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
7:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
7:pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
7:kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
7:ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
7:gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
7:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
7:postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
7:dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
7:dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
7:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
7:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
7:tcpdump:x:72:72::/:/sbin/nologin
7:tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
7:aming:x:1001:1001::/home/aming:/bin/bash
7:user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

下面改一下test.txt,將第1行改成6段的。

[root@localhost awk]# vim test.txt?
[root@localhost awk]# awk -F ':' '{print NF":" $0}' test.txt?
6:rootx:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin
7:games:x:12:100:games:/usr/games:/sbin/nologin
7:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7:nobody:x:99:99:Nobody:/:/sbin/nologin
7:ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
7:pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
7:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
7:dbus:x:81:81:System message bus:/:/sbin/nologin
7:polkitd:x:998:996:User for polkitd:/:/sbin/nologin
7:apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
7:tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
7:colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
7:abrt:x:173:173::/etc/abrt:/sbin/nologin
7:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
7:libstoragemgmt:x:995:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
7:dirsrv:x:389:389:user for 389-ds-base:/usr/share/dirsrv:/sbin/nologin
7:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
7:hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
7:unbound:x:388:388:Unbound DNS resolver:/etc/unbound:/sbin/nologin
7:amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
7:pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
7:setroubleshoot:x:387:387::/var/lib/setroubleshoot:/sbin/nologin
7:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
7:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
7:pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
7:qemu:x:107:107:qemu user:/:/sbin/nologin
7:ntp:x:38:38::/etc/ntp:/sbin/nologin
7:radvd:x:75:75:radvd user:/:/sbin/nologin
7:chrony:x:386:384::/var/lib/chrony:/sbin/nologin
7:named:x:25:25:Named:/var/named:/sbin/nologin
7:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
7:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
7:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
7:geoclue:x:385:382:User for geoclue:/var/lib/geoclue:/sbin/nologin
7:sssd:x:384:381:User for sssd:/:/sbin/nologin
7:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
7:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
7:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
7:pcp:x:383:380:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
7:kdcproxy:x:382:379:IPA KDC Proxy User:/:/sbin/nologin
7:ipaapi:x:381:378:IPA Framework User:/:/sbin/nologin
7:gnome-initial-setup:x:380:377::/run/gnome-initial-setup/:/sbin/nologin
7:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
7:postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
7:dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
7:dovenull:x:379:376:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
7:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
7:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
7:tcpdump:x:72:72::/:/sbin/nologin
7:tianqi:x:1000:1000:tianqi:/home/tianqi:/bin/bash
7:aming:x:1001:1001::/home/aming:/bin/bash
7:user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost awk]#

把行數小于等于10的列出來,也就是打印前十行。

[root@localhost awk]# awk -F ':' 'NR<=10' test.txt?
rootx: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
[root@localhost awk]#?

打印行數小于等于10,且第1段包含root或者sync的行。

[root@localhost awk]# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt?
rootx:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
[root@localhost awk]#?

打印段數等于6的行,且第1段包含root或者sync。

[root@localhost awk]# awk -F ':' 'NF==6 && $1 ~ /root|sync/' test.txt?
rootx:0:0:root:/root:/bin/bash
[root@localhost awk]#

只有之前改動的第1行符合要求。

顯示(該行的行號所對應的段數內容):如第一行就顯示第一段加冒號加第七段。

[root@localhost awk]# awk -F ':' '{print $NR":"$NF}' test.txt?
rootx:/bin/bash
x:/sbin/nologin
2:/sbin/nologin
4:/sbin/nologin
lp:/sbin/nologin
/sbin:/bin/sync
/sbin/shutdown:/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
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/bin/bash
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/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
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/bin/bash
:/bin/bash
:/bin/bash
[root@localhost awk]#

把前三行的第一段改成root

[root@localhost awk]# head -n3 /etc/passwd | awk -F ':' '$1="root"'?
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
[root@localhost awk]#?

上面的是賦值,前3行的第1段都變成了root。之前兩個=是匹配的意思,只能匹配出第1行。

[root@localhost awk]# head -n3 /etc/passwd | awk -F ':' '$1=="root"'?
root:x:0:0:root:/root:/bin/bash
[root@localhost awk]#?

[root@localhost awk]# head -n3 test.txt | awk -F ':' '$1="root"'?
root 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin

上面的分隔符沒有了,再用OFS定義一下就行了。
[root@localhost awk]# head -n3 test.txt | awk -F ':' '{OFS=":"} $1="root"'?
root:0:0:root:/root:/bin/bash
root:x:1:1:bin:/bin:/sbin/nologin
root:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost awk]#?

求出所有行的第三段的和。tot是求和的意思,第一個大括號里的是一個循環式,每行都循環一次,第一行就是0+第三段,第二行是第一行的第三段加第二行的第三段,以此類推。求和完畢以后,END結束,然后打印tot的和。

[root@localhost awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt?
80049
[root@localhost awk]#?

總結:上面這些僅僅是正則表達式中最基本的內容,sed和awk并沒有深入講解,但足以滿足日常工作需要。碰到復雜的,再研究便是。

?

?

友情鏈接:阿銘Linux

轉載于:https://my.oschina.net/u/3744518/blog/1608818

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試題字符集和編碼區別_您和理想工作之間的一件事-編碼面試!

面試題字符集和編碼區別A recruiter calls you for a position with your dream company. You get extremely excited and ask about their recruiting process. He replies saying “Its nothing big, you will have 5 coding rounds with our senior tech team, just the sta…

初探Golang(1)-變量

要學習golang&#xff0c;當然要先配置好相關環境啦。 1. Go 安裝包下載 https://studygolang.com/dl 在Windows下&#xff0c;直接下載msi文件&#xff0c;在安裝界面選擇安裝路徑&#xff0c;然后一直下一步就行了。 在cmd下輸入 go version即可看到go安裝成功 2. Golan…

macaca web(4)

米西米西滴&#xff0c;吃過中午飯來一篇&#xff0c;話說&#xff0c;上回書說道macaca 測試web&#xff08;3&#xff09;&#xff0c;參數驅動來搞&#xff0c;那么有小伙本又來給雷子來需求&#xff0c; 登錄模塊能不能給我給重新封裝一下嗎&#xff0c; 我說干嘛封裝&…

linux中安裝cx_Oracle

https://blog.csdn.net/w657395940/article/details/41144225 各種嘗試都&#xff0c;最后 pip install cx-Oracle 成功導入 轉載于:https://www.cnblogs.com/gcgc/p/11447583.html

rfm模型分析與客戶細分_如何使用基于RFM的細分來確定最佳客戶

rfm模型分析與客戶細分With some free time at hand in the midst of COVID-19 pandemic, I decided to do pro bono consulting work. I was helping a few e-commerce companies with analyzing their customer data. A common theme I encountered during this work was tha…

leetcode 208. 實現 Trie (前綴樹)

Trie&#xff08;發音類似 “try”&#xff09;或者說 前綴樹 是一種樹形數據結構&#xff0c;用于高效地存儲和檢索字符串數據集中的鍵。這一數據結構有相當多的應用情景&#xff0c;例如自動補完和拼寫檢查。 請你實現 Trie 類&#xff1a; Trie() 初始化前綴樹對象。 void…

那些年收藏的技術文章(一) CSDN篇

#Android ##Android基礎及相關機制 Android Context 上下文 你必須知道的一切 Android中子線程真的不能更新UI嗎&#xff1f; Android基礎和運行機制 Android任務和返回棧完全解析&#xff0c;細數那些你所不知道的細節 【凱子哥帶你學Framework】Activity啟動過程全解析 【凱子…

chrome json插件_如何使用此免費的Chrome擴展程序(或Firefox插件)獲取易于閱讀的JSON樹

chrome json插件JSON is a very popular file format. Sometimes we may have a JSON object inside a browser tab that we need to read and this can be difficult.JSON是一種非常流行的文件格式。 有時我們可能需要在瀏覽器選項卡中包含一個JSON對象&#xff0c;這很困難。…

test10

test10 轉載于:https://www.cnblogs.com/Forever77/p/11447638.html

數據倉庫項目分析_數據分析項目:倉庫庫存

數據倉庫項目分析The code for this project can be found at my GitHub.該項目的代碼可以在我的GitHub上找到 。 介紹 (Introduction) The goal of this project was to analyse historic stock/inventory data to decide how much stock of each item a retailer should hol…

leetcode 213. 打家劫舍 II(dp)

你是一個專業的小偷&#xff0c;計劃偷竊沿街的房屋&#xff0c;每間房內都藏有一定的現金。這個地方所有的房屋都 圍成一圈 &#xff0c;這意味著第一個房屋和最后一個房屋是緊挨著的。同時&#xff0c;相鄰的房屋裝有相互連通的防盜系統&#xff0c;如果兩間相鄰的房屋在同一…

HTTP緩存的深入介紹:Cache-Control和Vary

簡介-本文范圍 (Introduction - scope of the article) This series of articles deals with caching in the context of HTTP. When properly done, caching can increase the performance of your application by an order of magnitude. On the contrary, when overlooked o…

059——VUE中vue-router之路由嵌套在文章系統中的使用方法:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue-router之路由嵌套在文章系統中的使用方法&#xff1a;</title><script src"vue.js"></script><script src"v…

web前端效率提升之瀏覽器與本地文件的映射-遁地龍卷風

1.chrome瀏覽器&#xff0c;機制是攔截url&#xff0c;      1.在瀏覽器Element中調節的css樣式可以直接同步到本地文件&#xff0c;反之亦然&#xff0c;瀏覽器會重新加載css&#xff0c;省去刷新   2.在source面板下對js的編輯可以同步到本地文件&#xff0c;反之亦然…

linux : 各個發行版中修改python27默認編碼為utf-8

該方法可解決robot報錯&#xff1a;ascii codec cant encode character u\xf1 in position 16: ordinal not in range(128) 在下面目錄中新增文件&#xff1a;sitecustomize.py 內容為 #codingutf-8 import sysreload(sys) sys.setdefaultencoding(utf8) 各個發行版放置位置&a…

歸因分析_歸因分析:如何衡量影響? (第2部分,共2部分)

歸因分析By Lisa Cohen, Ryan Bouchard, Jane Huang, Daniel Yehdego and Siddharth Kumar由 麗莎科恩 &#xff0c; 瑞安布沙爾 &#xff0c; 黃美珍 &#xff0c; 丹尼爾Yehdego 和 亞洲時報Siddharth庫馬爾 介紹 (Introduction) This is our second article in a series wh…

ubuntu恢復系統_Ubuntu恢復菜單:揭開Linux系統恢復神秘面紗

ubuntu恢復系統Don’t try to convince yourself otherwise: along with all the good stuff, you’re going to have bad days with Linux.否則&#xff0c;請不要試圖說服自己&#xff1a;與所有好的東西一起&#xff0c;您將在Linux上度過糟糕的日子。 You (or the users y…

linux與磁盤相關的內容

本節所講內容1.認識SAS-SATA-SSD-SCSI-IDE硬盤2.使用fdisk對磁盤進行操作&#xff0c;分區&#xff0c;格式化3.開機自動掛載分區4.使用parted操作大于等于4T硬盤5.擴展服務器swap內存空間 MBR(Master Boot Record)主引導記錄&#xff0c;也就是現有的硬盤分區模式。MBR分區的標…

leetcode 87. 擾亂字符串(dp)

使用下面描述的算法可以擾亂字符串 s 得到字符串 t &#xff1a; 如果字符串的長度為 1 &#xff0c;算法停止 如果字符串的長度 > 1 &#xff0c;執行下述步驟&#xff1a; 在一個隨機下標處將字符串分割成兩個非空的子字符串。即&#xff0c;如果已知字符串 s &#xff0c…

頁面布局

頁面布局兩大類&#xff1a;   主站&#xff1a; 1 <div classpg-header> 2 <div stylewidth:980px;margin:0 auto;> 3 內容自動居中 4 </div> 5 <div classpg-content></div> 6 <div classpg-footer></div&…