格式:awk '{ pattern + action }' {filenames}
常用參數:
-F 指定分割域符 默認是以空格爲分隔符
BEGIN 打印開頭
END 打印信息尾
內置變量
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價於 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
例子:
-F的使用
[root@localhost ~]# cat /etc/passwd |awk -F: '{ print $1"\t"$7}'|head -5
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
BEGIN和END的使用
[root@localhost ~]# cat /etc/passwd |awk -F: 'BEGIN { print "user shell"}{ print $1"\t"$7} END { print "test /bin/bash" }'
user shell
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
....
test /bin/bash
匹配查找
[root@localhost ~]# cat /etc/passwd |awk -F: '{ if($1~/root/) print $1"\t"$7 }'
root /bin/bash
精確匹配
[root@localhost ~]# cat /etc/passwd |awk -F: '$1 == "root" { print $0 }'
root:x:0:0:root:/root:/bin/bash
不匹配
[root@localhost ~]#cat /etc/passwd |awk -F: '{ if($1!~/root/) print $1"\t"$7 }'
精確不匹配
[root@localhost ~]# cat /etc/passwd |awk -F: '$1 != "root" { print $0 }'
小於
awk '{if ($6 < $7) print $0 "$6 小於$7"}'
大於
awk '{if ($6 > $7) print $0 "$6 大於$7"}'
任意字符
其記錄第一域的第四個字符是a,使用句點.。表達式/^...a/意爲行首前三個字符任意,第四個是a,尖角符號代表行首
awk '$1 ~/^...a/'
或關係匹配
awk '$0~/(abc|123)/'
and or使用
&& 意味着兩邊匹配均爲真
|| 意味着兩邊匹配,有一真,則爲真
awk '{if ($1 == "abc" && $4 == "123") print $0}'
awk '{if ($1 == "abc" || $4 == "123") print $0}'
統計/etc/passwd:文件名,每行的行號,每行的列數,對應的完整行內容:
FILENAME,NF,NR使用 等價於cat /etc/passwd|wc -l
[root@localhost ~]#awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
filename:/etc/passwd,linenumber:37,columns:7,linecontent:mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
統計某個文件夾下佔用的字節數
ll|awk 'BEGIN {size=0;}{ size=size+$5; }END{ print "total size is",size/1024/1024,"M"}'
total size is 201.351 M
統計和
awk '{ sum += $2 }END{ print sum }' aa