awk命令

-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
相關文章
相關標籤/搜索