awk將一行內容稱為一條記錄鳖轰,將用指定分隔符分隔的列稱為域清酥;
awk一般以空格作為域分隔符,以\n作為記錄分隔符蕴侣;
awk也可以使用BEGIN和END進行匹配焰轻;
0、執(zhí)行awk程序的3種方式
(1)昆雀、命令行方式
語法形式:awk ' awk程序語句' 被處理文件名
(2)辱志、執(zhí)行awk腳本方式
語法形式:awk -f awk腳本文件名 被處理文件名
(3)、執(zhí)行shell腳本文件忆肾,不過指定編輯器為awk
語法形式:先vi編輯shell腳本文件荸频,文件名后綴為.sh,不過在開頭需要指定#!/bin/awk客冈,這點和shell腳本不同,shell腳本開頭指定的是#!/bin/bash稳强。然后在終端輸入:./shell腳本文件 被處理文件.
1场仲、awk內置變量
ARGC 命令行參數(shù)個數(shù)
ARGV 命令行參數(shù)排列
ENVIRON 支持隊列中系統(tǒng)環(huán)境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數(shù)
FS 設置輸入域分隔符,等價于命令行 -F選項
NF 瀏覽記錄的域的個數(shù)
NR 已讀的記錄數(shù)
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
2退疫、BEGIN模塊和END模塊
BEGIN
模塊后緊跟著動作塊渠缕,這個動作塊在awk處理任何輸入文件之前執(zhí)行。所以它可以在沒有任何輸入的情況下進行測試褒繁。它通常用來改變內建變量的值亦鳞,如OFS,RS和FS等,以及打印標題。如:awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test
燕差。上式表示遭笋,在處理輸入文件以前,域分隔符(FS)被設為冒號徒探,輸出文件分隔符(OFS)被設置為制表符瓦呼,輸出記錄分隔符(ORS)被設置為兩個換行符。awk 'BEGIN{print "TITLE TEST"}
只打印標題测暗。
END
不匹配任何的輸入文件央串,但是執(zhí)行動作塊中的所有動作,它在整個輸入文件處理完成后被執(zhí)行碗啄。如awk 'END{print "The number of records is" NR}' test
质和,上式將打印所有被處理的記錄數(shù)。
3稚字、變量應用實例
對/etc/passwd饲宿,輸出:文件名 行號 每行列數(shù) 每列內容
awk -F ':''{print "filename:" FILENAME ", linenumber:" NR", columns:" NF ", linecontent:" $0}' /etc/passwd
使用printf,代碼更簡潔尉共、易讀
awk -F ':''{printf("filename:%5s, linenumber:%s, columns:%s, linecontent:%s\n"), FILENAE, NR, NF, $0}' /etc/passwd
其中$0表示所有域
4褒傅、參考文獻:
0、awk 用法(使用入門)(推薦)
1袄友、awk,sed,grep,cut,uniq,sort,tr,wc,head,tail的常見用法
2殿托、 正則表達式及grep、sed剧蚣、awk支竹、cut、sort鸠按、uniq工具
3礼搁、執(zhí)行awk程序的3種方式