-F選項的做用是指定分隔符。若是不加-F選項,則以空格或者tab爲分隔符。print爲打印操做,用來打印某個字段。$1爲第1個字段,$2爲第2個字段,以此類推。可是$0比較特殊,它表示整行:centos
[root@centos01 test_awk_dir]# head -n 5 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 [root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1}' root bin daemon adm lp [root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $0}' 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
awk的格式說明: -F後面緊跟單引號,單引號裏面爲分隔符。print操做要用{}括起來,不然會報錯。print還能夠打印自定義內容,可是自定義的內容要用雙引號括起來:bash
[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1,$2,$3}' root x 0 bin x 1 daemon x 2 adm x 3 lp x 4 [root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1"@"$2"@"$3}' root@x@0 bin@x@1 daemon@x@2 adm@x@3 lp@x@4
匹配字符串ssh
[root@centos01 test_awk_dir]# awk '/root/' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
指定某個段進行匹配,~就是匹配的意思。還能夠屢次匹配post
[root@centos01 test_awk_dir]# awk -F ':' '$1~/root/' test.txt root:x:0:0:root:/root:/bin/bash # 輸出兩條同樣的是由於這一天同時知足root和operator匹配 [root@centos01 test_awk_dir]# awk -F ':' '/root/ {print $0} /operator/ {print $0}' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
| 匹配串知足其一便可code
[root@centos01 test_awk_dir]# awk -F ':' '/root|operator/ {print $0}' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
awk條件操做符ip
[root@centos01 test_awk_dir]# awk -F ':' '$3==0' test.txt root:x:0:0:root:/root:/bin/bash [root@centos01 test_awk_dir]# awk -F ':' '$3==0 {print $0}' test.txt root:x:0:0:root:/root:/bin/bash [root@centos01 test_awk_dir]# awk -F ':' '$7=="/sbin/nologin" {print $0}' 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@centos01 test_awk_dir]# 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 snowball:x:1000:1000::/home/snowball:/bin/bash test01:x:1001:1001::/home/test01:/bin/bash test02:x:1002:1002::/home/test02:/bin/bash test03:x:1003:1004::/home/test03:/bin/bash test06:x:1004:1005::/home/test06:/bin/bash test07:x:1005:1006::/home/test07:/bin/bash test08:x:1006:1007::/home/test08:/bin/bash [root@centos01 test_awk_dir]# 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 test03:x:1003:1004::/home/test03:/bin/bash test06:x:1004:1005::/home/test06:/bin/bash test07:x:1005:1006::/home/test07:/bin/bash test08:x:1006:1007::/home/test08:/bin/bash [root@centos01 test_awk_dir]# awk -F ':' '{if ($3<$4) {print $0}}' 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 test03:x:1003:1004::/home/test03:/bin/bash test06:x:1004:1005::/home/test06:/bin/bash test07:x:1005:1006::/home/test07:/bin/bash test08:x:1006:1007::/home/test08:/bin/bash [root@centos01 test_awk_dir]# awk -F ':' '$3<7 || $7 ~ /bash/' 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 snowball:x:1000:1000::/home/snowball:/bin/bash test01:x:1001:1001::/home/test01:/bin/bash test02:x:1002:1002::/home/test02:/bin/bash test03:x:1003:1004::/home/test03:/bin/bash test06:x:1004:1005::/home/test06:/bin/bash test07:x:1005:1006::/home/test07:/bin/bash test08:x:1006:1007::/home/test08:/bin/bash
awk 經常使用的內置變量有OFS、NF和NR,其中OFS和-F選項有相似的功能,也是用來定義分隔符的,可是它是在輸出的時候定義,NF表示用分隔符分隔後一共有多少段,NR表示行號字符串
[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{OFS="@"} {print $1,$2,$3}' root@x@0 bin@x@1 daemon@x@2 adm@x@3 lp@x@4 [root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print NR"#"$0}' 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 [root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print NF"#"$0}' 5#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 [root@centos01 test_awk_dir]# awk -F ':' 'NR<=10' test.txt #輸出前10行 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@centos01 test_awk_dir]# awk -F ':' 'NR<=10 && $1 ~ /sync/' test.txt sync:x:5:0:sync:/sbin:/bin/sync [root@centos01 test_awk_dir]# head -n 3 test.txt 0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@centos01 test_awk_dir]# [root@centos01 test_awk_dir]# head -n 3 test.txt | awk -F ':' '$1="root"' root 0 root /root /bin/bash root x 1 1 bin /bin /sbin/nologin root x 2 2 daemon /sbin /sbin/nologin
awk進行數學運算數學
[root@centos01 test_awk_dir]# tail -n 3 test.txt test06:x:1004:1005::/home/test06:/bin/bash test07:x:1005:1006::/home/test07:/bin/bash test08:x:1006:1007::/home/test08:/bin/bash [root@centos01 test_awk_dir]# tail -n 3 test.txt | awk -F ':' '{(total=total+$3)}; END {print total}' 3015