awk

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"
}

參考資料

https://www.runoob.com/linux/linux-comm-awk.html