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"
}
參考資料