Linux三劍客之awk的使用

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 數組成員
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章