awk 是一款極其強大的文本處理工具,其語言於c語言的語法極其相似,上手很容易
內置變量與運算符數據來自RUNOOB
-
簡單用法
awk [參數] 'awk代碼' awk [參數] -f awk腳本文件
-
常用參數
cat xxx.txt | awk -F ':' 'BEGIN{}{printf("%s %s", $1, $2);}END{printf("OK!");}' # -F 參數是指定對每行字符串以什麼字符爲分割,每個被分割的部分存儲在變量:$1, $2, $3...中,整行字符串存儲在$0中。 # BEGIN{}中的代碼將在文本處理前執行,同樣,END{}會文本處理後執行,{}中的代碼用來處理每行的文本。 cat xxx.txt | awk -v var1=${tmp} '{printf("%d\n", $3/var1);}' # -v 參數是引入外部變量,把${tmp}賦值給var1,在awk內部代碼中就可以使用var1了。 # -v參數可以多次引用,也就是說可以引入多個變量。 cat xxx | awk -v var1=${tmp} '{ if ($1 ~ /eth/) { print $0; } }' # 通過這種方式可以使用正則表達式進行字符串匹配。 # awk支持print,使用print末尾自動加上\n。
-
內置變量
變量 | 描述 |
---|---|
$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) |
- 運算符
運算符 | 描述 |
---|---|
= += -= *= /= %= ^= **= | 賦值 |
?: | C條件表達式 |
|| | 邏輯或 |
&& | 邏輯與 |
~ 和 !~ | 匹配正則表達式和不匹配正則表達式 |
< <= > >= != == | 關係運算符 |
空格 | 連接 |
+ - | 加,減 |
* / % | 乘,除與求餘 |
+ - ! | 一元加,減和邏輯非 |
^ *** | 求冪 |
++ – | 增加或減少,作爲前綴或後綴 |
$ | 字段引用 |
in | 數組成員 |