awk 3元表達式,if...else結構都可以用3元表達式改寫
ghostwu@dev:~/linux/awk$ awk -v FS=":" '{ type=$3>=1000?"普通用戶":"系統用戶";print $1,type}' /etc/passwd root 系統用戶 daemon 系統用戶 bin 系統用戶 sys 系統用戶 sync 系統用戶 games 系統用戶 man 系統用戶 lp 系統用戶 mail 系統用戶 news 系統用戶 uucp 系統用戶 proxy 系統用戶 www-data 系統用戶 backup 系統用戶 list 系統用戶 irc 系統用戶 gnats 系統用戶 nobody 普通用戶 systemd-timesync 系統用戶 systemd-network 系統用戶 systemd-resolve 系統用戶 systemd-bus-proxy 系統用戶 syslog 系統用戶 _apt 系統用戶 messagebus 系統用戶 uuidd 系統用戶 lightdm 系統用戶 whoopsie 系統用戶 avahi-autoipd 系統用戶 avahi 系統用戶 dnsmasq 系統用戶 colord 系統用戶 speech-dispatcher 系統用戶 hplip 系統用戶 kernoops 系統用戶 pulse 系統用戶 rtkit 系統用戶 saned 系統用戶 usbmux 系統用戶 ghostwu 普通用戶 mysql 系統用戶 guest-iilhaz 系統用戶 smmta 系統用戶 smmsp 系統用戶
統計普通用戶與系統用戶的個數
ghostwu@dev:~/linux/awk$ awk -v FS=":" '{$3>=1000 ? user++ : snumber++} END{print "user number:", user, "system number:", snumber}' /etc/passwd user number: 2 system number: 42
awk打印奇偶行
1、在awk中,如果省略了模式對應的動作,當前行滿足模式時,默認動作為打印整行,即{print $0}
2、在awk中,0或者空字符串表示"假",非0值或者非空字符串表示"真",當模式為假,動作不會執行,當模式為真,動作會執行
ghostwu@dev:~/linux/awk$ awk 'i=!i' lines.txt 第 1 行 第 3 行 第 5 行 第 7 行 第 9 行 第 11 行
awk掃描第一行時,i變量被初始化為空值, 取反之后 變為真, 整個模式就為真,所以打印第一行, 第二行的時候,取反賦值變為假。。。。以此類推
ghostwu@dev:~/linux/awk$ awk '{i=!i;print i;}' lines.txt 1 0 1 0 1 0 1 0 1 0 1
再次取反,打印的就是偶數行
ghostwu@dev:~/linux/awk$ awk '!(i=!i)' lines.txt 第 2 行 第 4 行 第 6 行 第 8 行 第 10 行