前言:
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)