awk 入門
Awk是用于Unix和類Unix系統的強大文本解析工具,但是由于它具有可用于執行常見解析任務的程式設計功能,是以它也被視為一種程式設計語言。 您可能不會使用awk開發下一個GUI應用程式,并且它可能不會代替您的預設腳本語言,但是它對于特定任務而言是強大的實用程式。
這些任務可能是令人驚訝的多樣化。 發現awk可以最好地解決您的哪些問題的最好方法是學習awk。 您會驚訝于awk如何幫助您完成更多工作,卻花費更少的精力。
Awk的基本文法為:
首先,請建立此示例檔案并将其另存為colours.txt
name color amount
apple red 4
banana yellow 6
strawberry red 3
grape purple 10
apple green 8
plum purple 2
kiwi brown 4
potato brown 9
pineapple yellow 5
此資料被一個或多個空格分隔為列。 以某種方式組織要分析的資料是很常見的。 它不一定總是由空格分隔的列,甚至不是逗号或分号,但尤其是在日志檔案或資料轉儲中,通常存在可預測的模式。 您可以使用資料模式來幫助awk提取和處理您要關注的資料。
列印列
在awk中, 列印功能将顯示您指定的任何内容。 您可以使用許多預定義的變量,但是一些最常見的變量是指定文本檔案中列的整數。 試試看:
$
awk
'{print $2;}' colours.txt
color
red
yellow
red
purple
green
purple
brown
brown
yellow
在這種情況下,awk顯示第二列,用$ 2表示。 這是相對直覺的,是以您可能會猜出print $ 1顯示第一列,而print $ 3顯示第三列,依此類推。
要顯示所有列,請使用$ 0 。
美元符号( $ )後的數字是一個表達式 ,是以$ 2和$(1 + 1)表示同一件事。
有條件地選擇列
您使用的示例檔案非常結構化。 它有一行充當标題,而各列直接互相關聯。 通過定義條件需求,您可以限定希望awk在檢視此資料時傳回的内容。 例如,要檢視第2列中與“黃色”比對的項目并列印第1列的内容:
awk
'$2=="yellow"{print $1}' colours.txt
banana
pineapple
正規表達式也可以。 該條件查詢條件為$ 2 ,以便與字母p大緻比對,後跟任意數量的(一個或多個)字元,然後依次跟着字母p :
$
awk
'$2 ~ /p.+p/ {print $0}' colours.txt
grape purple
10
plum purple
2
數字自然由awk解釋。 例如,要列印第三列包含大于5的整數的任何行:
awk
'$3>5 {print $1, $2}' colours.txt
name color
banana yellow
grape purple
apple green
potato brown
場分隔符
預設情況下,awk使用空格作為字段分隔符。 但是,并非所有文本檔案都使用空格來定義字段。 例如,使用以下内容建立一個名為colours.csv的檔案:
name,color,amount
apple,red,4
banana,yellow,6
strawberry,red,3
grape,purple,10
apple,green,8
plum,purple,2
kiwi,brown,4
potato,brown,9
pineapple,yellow,5
隻要您指定應将哪個字元用作指令中的字段分隔符,Awk即可以完全相同的方式處理資料。 使用--field-separator (或簡稱為-F )選項來定義定界符:
$
awk
-F
","
'$2=="yellow" {print $1}' file1.csv
banana
pineapple
儲存輸出
使用輸出重定向,您可以将結果寫入檔案。 例如:
這将建立一個包含awk查詢内容的檔案。
每個查詢 ,方法是在awk語句中包括重定向:
這将生成名為yellow.txt , red.txt等的檔案。
在下一篇文章中,您将了解有關字段,記錄和一些強大的awk變量的更多資訊。
本文改編自社群技術播客Hacker Public Radio 。
翻譯自: https://opensource.com/article/19/10/intro-awk
awk 入門