awk通過BEGIN
亡容,END
實(shí)現(xiàn)在文本處理器前和處理后依然可以執(zhí)行一些處理局冰。
awk的命令框架如下
BEGIN{ commands }
/pattern/{ commands }
/pattern/{ commands }
...
END{ commands }
其中植兰,/pattern/
為正則表達(dá)式或邏輯表達(dá)式焚挠。
BEGIN{}
字段實(shí)現(xiàn)在文本處理前準(zhǔn)備好相關(guān)的內(nèi)容;END{}
字段實(shí)現(xiàn)在文本處理后繼續(xù)對(duì)處理結(jié)果進(jìn)行分析湾笛,例如可以在/pattern/{}
字段中將對(duì)文本的處理保留至數(shù)組拟烫,最后在END{}
字段中對(duì)數(shù)組進(jìn)行進(jìn)一步的處理。
案例
對(duì)文本中的某一列求均值
n=3
awk -v i=$n '{sum=sum+$i;}END{print sum/NR;}' input.txt
輸出特定行
awk 'NR==3{print $0}' input.txt
awk '(NR<3) || (NR>6){print $0}' input.txt
awk '(NR<10) && (NR>6){print $0}' input.txt
輸出正則表達(dá)式匹配行
# 輸出非#開頭的行
awk '/^[^#]/ {print $0}' input.txt
# 輸出以字母開頭的行
awk '/^[a-zA-Z]/ {print $0}' input.txt
# 輸出以!結(jié)尾的行
awk '/!$/ {print $0}' input.txt