一、awk工作原理
逐行讀取文本,默認(rèn)以空格或tab鍵為分隔符進(jìn)行分隔,將分隔所得的各個(gè)字段保存到內(nèi)建變量中,并按模式或者條件執(zhí)行編輯命令。
sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個(gè)"字段"然后再進(jìn)行處理。awk信息的讀入也是逐行讀取的,執(zhí)行結(jié)果可以通過print的功能將字段數(shù)據(jù)打印顯示。在使用awk命令的過程中,可以使用邏輯操作符"&&“表示"與”、“||“表示"或”、”!"表示"非,還可以進(jìn)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方。
二、awk相關(guān)命令
命令格式:
awk 選項(xiàng) ‘模式或者條件 {操作}’ 文件1 文件2…
awk -f 腳本文件 文件1 文件2…
常見的內(nèi)建變量(可直接使用)如下所示:
選項(xiàng) | 作用 |
---|---|
FS: | 列分割符。指定每行文本的字段分隔符,默認(rèn)為空格或制表位。與"-F"作用相同 |
NF: | 當(dāng)前處理的行的字段個(gè)數(shù)。 |
NR: | 當(dāng)前處理的行的行號(hào)(序數(shù)) 。 |
$0: | 當(dāng)前處理的行的整行內(nèi)容。 |
$n: | 當(dāng)前處理行的第n個(gè)字段(第n列)。 |
FILENAME: | 被處理的文件名。 |
RS: | 行分隔符。awk從文件上讀取資料時(shí),將根據(jù)Rs的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進(jìn)行處理。預(yù)設(shè)值是’\n’ |
三、awk的使用
按行輸出文本:
先處理完BEGIN的內(nèi)容,再打印文本里面的內(nèi)容:
BEGIN模式表示,在處理指定的文本之前,需要先執(zhí)行BEGIN模式中指定的動(dòng)作;awk再處理指定的文本,之后再執(zhí)行END模式中指定的動(dòng)作,END{}語句塊中,往往會(huì)放入打印結(jié)果等語句
按字段輸出文本:
通過管道、雙引號(hào)調(diào)用 Shell 命令:
- 當(dāng)getline左右無重定向符“<”或“|”時(shí),awk首先讀取到了第一行,就是1,然后getline,就得到了1下面的第二行,就是2,因?yàn)間etline之后,awk會(huì)改變對(duì)應(yīng)的NF,NR,F(xiàn)NR和$0等內(nèi)部變量,所以此時(shí)的$0的值就不再是1,而是2了,然后將它打印出來。
- 當(dāng)getline左右有重定向符“<”或“|”時(shí),getline則作用于定向輸入文件,由于該文件是剛打開,并沒有被awk讀入一行,只是getline讀入,那么getline返回的是該文件的第一行,而不是隔行。
$1=$1 是用來激活$0的重新賦值,也就是說 字段$1…和字段數(shù)NF的改變會(huì)促使awk重新計(jì)算$0的值,通常是在改變OFS后而需要輸出$0時(shí)這樣做文章來源:http://www.zghlxwxcb.cn/news/detail-766494.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-766494.html
到了這里,關(guān)于shell腳本----awk命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!