一、簡介:
awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入、一個或多個文件,或其它命令的輸出。它支持用戶自定義 函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk的處理文本和數據的方 式是這樣的,它逐行掃描文件,從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操做。若是沒有指定處理動做,則把匹配的行顯示到標 準輸出(屏幕),若是沒有指定模式,則全部被操做所指定的行都被處理。awk分別表明其做者姓氏的第一個字母。由於它的做者是三我的,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。linux
二、語法:
awk [選項參數] ‘script’ var=value file(s)
或
awk [選項參數] -f scriptfile var=value file(s)
使用方法:
awk ‘{pattern + action}’ {filenames} # pattern 表示AWK在數據中查找的內容,而action 是在找到的匹配內容時所執行的一系列命令。花括號({})不須要在程序中始終出現,是用於根據特定的模式對一系列指令進行分組。pattern 就是要表示的正則表達式,用斜槓括起來。
一般,awk是以文件的一行爲處理單位。awk每接受文件的一行,而後執行相應的命令,來處理文本。
在awk中,花括號用於將幾塊代碼組合到一塊兒,這一點相似於C語言。正則表達式
-F參數:指定分隔符,能夠指定一個或多個。
NF :用來記錄一行中有多少個字段
NR:記錄數量,一行就是一個記錄。編程
例子:
cat test
i am a student ;
you are a teacher;app
awk -F 「 「 ‘{print $2}’ test
則輸出:
am
are
解釋:-F後面指定」 「 空格爲分隔符; $2,表示第2個字段; test :表示是文件名。
awk會根據空格和製表符,將每一行分紅若干字段,依次用$1 $2 $3 表明第一個字段、第二個字段、第三個字段。編程語言
三、變量
除了 $+數字 表示某個字段,awk 還提供了其餘一些變量
變量NF:表示當前行有多少個字段,所以 $NF 表示一行的最後一個字段;
print 命令裏面的逗號,表示輸出的時候,兩個部分之間使用空格分隔。
變量NR:表示當前處理的是第幾行
print命令裏面,若是原樣輸出字符,要放在雙引號裏面。ide
awk 的其餘內置變量以下:
FILENAME:當前文件名
FS:字段分隔符,默認是空格和製表符。
RS:行分隔符,用於分隔每一行,默認是換行符。
OFS:輸出字段的分隔符,用於打印是分隔字段,默認爲空格。
ORS:輸出記錄的分隔符,用於打印時分隔記錄,默認爲換行符。
OFMT:數字輸出的格式,默認爲:%6.6g函數
四、函數
awk 提供了內置函數,方便對原始數據的處理
經常使用的函數:
toupper(): 字符轉爲大寫
tolower():字符轉爲小寫
length():返回字符串長度
substr():返回子字符串
sin():正弦
cos():餘弦
sqrt():平方根
rand():隨機數工具
五、條件
awk 容許指定輸出條件,只輸出符合條件的行。
輸出條件要寫在動做的前面。
awk ‘條件 動做’ 文件名spa
六、if語句
awk 提供了if結構,用於編寫複雜的條件。不只能夠指定if,還能夠指定else部分。舉例以下:命令行
AWK 運算符: