天天看點

[其他][linux] awk的簡要說明

前言:

awk是linux下處理文本的便捷工具,其主要行為模型為:“讀取指定的輸入,每次取一行文本,按指定的‘分隔符’将文本分成n段,把判斷條件施加在每段文本上,如果滿足判斷條件則執行指定的動作,否則什麼也不幹”。

注意幾點:

1)awk的輸入可以是任意文本資料來源,可以是檔案,也可以來自控制台輸入;

2)awk按行為機關處理,每次取一行,直到把輸入資料的所有行都取完;

3)需要自行制定分隔符,分隔符可以是任意“字元,字元串”,也可以同時指定多個分隔符,比如 即認為 “逗号”是分隔符,也認為“fengefu”這個字元串是分隔符。

文法:

awk '[條件] {動作}' 輸入

條件是可選的,動作是必選的

例:

處理a.txt,以.為分隔符,輸出第2和第3個字段的值
awk '{printf $2,$3}' a.txt      
處理a.txt,以.為分隔符,滿足第2個字段值大于0,輸出第2和第3個字段的值
awk -F. '$2>0 {printf $2,$3}' a.txt      
處理a.txt,使用預設的空格為分隔符,滿足第2個字段值大于0,且第3個字段大于第2個字段,輸出第2和第3個字段+1的值
awk '$2>0 && $3>$2 {printf $2,$3+1}' a.txt      

内建變量:

變量    描述
\$n    目前記錄的第n個字段,字段間由FS分隔
\$0    完整的輸入記錄
ARGC    指令行參數的數目
ARGIND    指令行中目前檔案的位置(從0開始算)
ARGV    包含指令行參數的數組
CONVFMT    數字轉換格式(預設值為%.6g)ENVIRON環境變量關聯數組
ERRNO    最後一個系統錯誤的描述
FIELDWIDTHS    字段寬度清單(用空格鍵分隔)
FILENAME    目前檔案名
FNR    各檔案分别計數的行号
FS    字段分隔符(預設是任何空格)
IGNORECASE    如果為真,則進行忽略大小寫的比對
NF    一條記錄的字段的數目
NR    已經讀出的記錄數,就是行号,從1開始
OFMT    數字的輸出格式(預設值是%.6g)
OFS    輸出記錄分隔符(輸出換行符),輸出時用指定的符号代替換行符
ORS    輸出記錄分隔符(預設值是一個換行符)
RLENGTH    由match函數所比對的字元串的長度
RS    記錄分隔符(預設是一個換行符)
RSTART    由match函數所比對的字元串的第一個位置
SUBSEP    數組下标分隔符(預設值是/034)      

詳細教程: