Linux文字處理工具
awk [參數] 'script' var=value file(s) 或 awk [參數] -f scriptfile var=value file(s)
- -F fs or –field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正規化。 - -v var=value or –asign var=value
赋值一个用户定義變量。 - -f scripfile or –file scriptfile
從腳本文件中讀取awk命令。
内建變數
| 變數 | 說明 |
|---|---|
| $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) |
運算符
| 運算符 | 說明 |
|---|---|
| = += -= *= /= %= ^= **= | 赋值 |
| ?: | if else 的寫法 |
| || | 或 or |
| && | 和 and |
| ~ 和 !~ | 匹配正規化 和 不匹配正規化 |
| < <= > >= != == | 關係運算符 |
| 空格 | 連接 |
| + – | 加,减 |
| * / % | 乘、除、求餘 |
| ! | Not |
| ^ *** | 求幂 |
| ++ — | 增加或减少 |
| $ | 字段引用 |
| in | 數组成 |
常見用法
取於每行第一個值大於2
awk '$1>2' log.txt
$ awk '{print $1,$4}' log.txt
$ awk -F, '{print $1,$2}' log.txt
$ awk -va=1 '{print $1,$1+a}' log.txt
$ awk -f cal.awk log.txt
awk脚本
- BEGIN{ 这裡放執行前的指令 }
- {这裡放每一行資料要執行的指令}
- END {这裡放最後要執行的指令 }
#!/bin/awk -f
#執行前
BEGIN {
printf "NAME NO. \n"
printf "------------\n"
}
#執行中
{
math+=$3
printf "%-6s %-6s\n", $1, $2
}
#執行后
END {
printf "--------\n"
}
參考資料