Linux基本命令之awk

重要概念

記錄(Records):記錄默認以換行符爲分割符,可以設置RS變量來更改分隔符,RS可以是單個字符也可以是字符串,當RS爲空時,以空行分割。

(Fields):每當一個記錄被讀取,awk使用FS變量作爲分隔符將記錄分割成域。FS可以是單個字符也可以是字符串,當FS爲空時,每個字符爲一個域每個域的值可以通過它的位置$1$2...引用$0表示整個記錄

輸出命令print用於輸出文本。其輸出的文本總是以"輸出記錄分隔符"分割的,默認值爲空格符。例如:print $1, $3顯示當前記錄的第1和第3個域,並以預定義的輸出域分隔符分隔,其默認值爲一個空格符printf等同於C的格式化輸出。

模式和動作awk腳本是由模式和動作組成pattern {action} 兩者皆是可選的,如果沒有pattern,則action應用到全部記錄。如果沒有action,則輸出所有匹配的記錄。 例如:awk '/apple/{print $0}'pattern爲匹配包含apple的記錄,action爲打印該記錄。


內建變量

NR: 已輸入記錄的條數。(The total number of input records seen so far.)

NF: 當前記錄中域的個數。(The number of fields in the current input record.)

FILENAME: 當前輸入文件的文件名。

FS: 域分隔符(input field separator)

RS: 記錄分隔符。(input record separator)

OFS: 輸出域分隔符(output recode separator)

ORS: 輸出記錄分隔符(output field separator)

OFMT: 輸出數字格式(format for numeric output),其默認值爲"%.6g


模式和動作

模式可以是以下任意一個:

 模式

 描述

 /正則表達式/

 使用正則表達式匹配行例如:awk '/apple/{print $0;}'

 關係表達式

 使用關係運算符對字符串和數字進行比較操作

 例如:awk '$1>100 {print $1;}'

 模式匹配表達式

 運算符 ~~! 分別表示匹配、不匹配

 例如:awk '$1 ~ /apple/ {print $1;}'

 pattern1,pattern2

 指定匹配行的範圍,pattern 不能是 BEGINEND 模式

例如: awk '/apple/,/banana/{print $0;}' filename

 BEGIN

 第一條輸入記錄被處理之前所發生的動作

 例如:awk 'BEGIN{FS=":";}{print $1,$2;}'

 END

 最後一條輸入記錄被讀取之後發生的動作, 例如: awk '{print $0;}END{print "total line number:",NR;}'

動作一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,並位於大括號內。可以爲以下任意一個:

動作

 描述

 變量賦值語句

 包括數組賦值,例如:awk 'BEGIN{total=0}{print $1;total+=$1;}END{print total;}'

 輸出語句

 printprintf 語句

 流程控制結構語句

 ifforwhiledo 結構

 函數語句

 包括內置函數


內置函數
內置函數太多,用的時候查找就行,下面附上內置函數的手冊地址:

   http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din


AWK常用命令

Awk常用的單行命令,詳見:

 http://blog.csdn.net/xinhanggebuguake/article/details/8461002

 

 

參考:http://blog.sina.com.cn/s/blog_87edb13801015dko.html

發佈了147 篇原創文章 · 獲贊 25 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章