1,簡(jiǎn)介
1) 從輸入流讀取一行(文件,管道或者標(biāo)準(zhǔn)輸入),存儲(chǔ)到內(nèi)存中。
echo hzq 123 | awk '{print $0}'
awk '{print $0}' test.csv
grep line test.csv | awk 'print $0'
2)對(duì)每一行執(zhí)行執(zhí)行相應(yīng)的命令,處理文本。(默認(rèn)的域分隔符是空格和tab,可以使用-F指定單一的tab分隔符-F '\t')
域分隔符分開的每一項(xiàng)稱為一個(gè)域。
3)對(duì)每一行,重復(fù)執(zhí)行命令,直到結(jié)尾。
2,語法與概念
1)awk [-F field-separator] 'commands'
-F 指定域分隔符, 默認(rèn)為空格或者tab
awk -F ':' '{print $1"\t"$2}' test.csv指定 :作為域分隔符。
2)awk內(nèi)置的變量
$0 : 整行記錄
$1~$n : 表示第1~n個(gè)域
NF:域的個(gè)數(shù)
NR:已讀的記錄數(shù)awk '{print NR "\t" NF}' test.csv
FNR 當(dāng)前記錄數(shù),是各個(gè)文件自己的行號(hào)
$NF 表示的最后一個(gè)Field(域)
FS 輸入字段分隔符 默認(rèn)是空格或Tab
RS 輸入的記錄分隔符, 默認(rèn)為換行符
3,例子
1)netstat -anp | grep tcp | awk '{printf "%s %s %-8s %-8s %-8s %-22s %-22s %-15s %-15s\n",NR,FNR,$1,$2,$3,$4,$5,$6,$7}'
2)netstat -anp | grep tcp | awk '$6 == "LISTEN" || $6 == "ESTABLISHED" {print $7}'
3) awk -F ':' '{print $1, $6}' /etc/passwd
awk 'FS=":" {print $1, $6}' /etc/passwd
4)awk '$NF ~ /976/ {print $NF}' test.csv最后一個(gè)域匹配字符串976的
netstat -anp | grep tcp | awk '/ESTABLISHED/ && !/mysql/'