天天看點

awk 入門_awk入門,強大的文本分析工具

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 入門