awk命令使用例項

夢共裡醉發表於2020-10-12
Awk是為高階文字處理而設計的通用 語言。它主要用作報告和分析工具。本文介紹awk在 行中操作文字的使用方式。

Awk一次對一條記錄進行操作,直到到達輸入的末尾。記錄由一個稱為記錄分隔符的字元分隔。預設的記錄分隔符是換行符,這意味著文字資料中的每一行都是一個記錄。

每條記錄中的欄位由 $後跟欄位號(以1開頭)引用。第一個欄位用 $1表示,第二個欄位用 $2表示,依此類推。最後一個欄位也可以用特殊變數 $NF引用。整個記錄可以用 $0引用。

Awk模式

Awk支援不同型別的模式,包括正規表示式、關係表示式、範圍和特殊表示式模式。

在下面的例子中,將建立一個名為“ teams.txt”的檔案,檔案內容如下:

[root@localhost ~]# cat teams.txt
Bucks Milwaukee    60 22 0.732 
Raptors Toronto    58 24 0.707 
76ers Philadelphia 51 31 0.622
Celtics Boston     49 33 0.598
Pacers Indiana     48 34 0.585
正規表示式模式

Awk的正規表示式模式用斜線(//)包含起來,例如:要顯示包含“0.5”的每條記錄,可以執行以下 :

[root@localhost ~]# awk '/0.5/ {print $0}' teams.txt 
Celtics Boston     49 33 0.598
Pacers Indiana     48 34 0.585

awk命令使用例項awk命令使用例項
要顯示包含“0.5”的每條記錄的第一個和第二個欄位:

[root@localhost ~]# awk '/0.5/ {print $1,$2}' teams.txt 
Celtics Boston
Pacers Indiana

awk命令使用例項awk命令使用例項
顯示一個或者多個數字開頭的記錄,並列印第一列:

[root@localhost ~]# awk '/^[0-9]/ {print $1}' teams.txt 
76ers

awk命令使用例項awk命令使用例項

關係表示式模式

關係表示式模式通常用於匹配特定欄位或變數的內容。
常用的關係運算子有:

  • ~:包含
  • !~:不包含
  • >:大於
  • <:小於
  • >=:大於等於
  • <=:小於等於
  • =:等於
  • !=:不等於

使用 ~“包含”比較運算子。例如,顯示第二個欄位中包含“ia”字元的每條記錄:

[root@localhost ~]# awk '$2 ~ /ia/ {print $0}' teams.txt 
76ers Philadelphia 51 31 0.622
Pacers Indiana     48 34 0.585

awk命令使用例項awk命令使用例項
若要匹配不包含給定字元的記錄,可以使用 !~不包含運算子。例如,顯示第二個欄位中不包含“ia”字元的每條記錄:

[root@localhost ~]# awk '$2 !~ /ia/ {print $0}' teams.txt 
Bucks Milwaukee    60 22 0.732 
Raptors Toronto    58 24 0.707 
Celtics Boston     49 33 0.598

使用 !=“不等於”運算子,
awk命令使用例項awk命令使用例項
使用 >=“大於等於”運算子,顯示第四個欄位大於等於30的記錄:

[root@localhost ~]# awk '$4 >= 30 {print $0}' teams.txt 
76ers Philadelphia 51 31 0.622
Celtics Boston     49 33 0.598
Pacers Indiana     48 34 0.585

awk命令使用例項awk命令使用例項

範圍模式

範圍模式由逗號分隔的兩組字元組成,從與第一個字串匹配的記錄開始,直到與第二個字串的記錄匹配為止的所有記錄。

例如,顯示從“Raptors”到 “Celtics”在內的記錄,:

[root@localhost ~]# awk '/Raptors/,/Celtics/ {print $0}' teams.txt 
Raptors Toronto    58 24 0.707 
76ers Philadelphia 51 31 0.622
Celtics Boston     49 33 0.598

awk命令使用例項awk命令使用例項
範圍模式也可以使用關係表示式,例如,顯示第四個欄位等於31到第四個欄位等於34 的記錄:

[root@localhost ~]# awk '$4 == 31 , $4 == 34 {print $0}' teams.txt 
76ers Philadelphia 51 31 0.622
Celtics Boston     49 33 0.598
Pacers Indiana     48 34 0.585

awk命令使用例項awk命令使用例項

特殊表示式模式

Awk包括以下特殊模式。

  • BEGIN:在處理記錄之前執行此操作。
  • END:用於在處理記錄之後執行此操作。

BEGIN模式通常用於設定變數,END模式用於處理統計的資料。例如,下面將顯示“Start Processing.”,然後顯示第三個欄位,最後顯示”End Processing.”:

[root@localhost ~]# awk 'BEGIN {print "Start Processing."};{print $3};END {print "End Processing."}' teams.txt 
Start Processing.
60
58
51
49
48
End Processing.

awk命令使用例項awk命令使用例項

內建變數

Awk有許多內建變數,允許控制程式的處理方式。下面是一些常見的內建變數:

  • NF:記錄中的欄位數
  • NR:當前記錄的編號
  • FILENAME:當前正在處理的輸入檔名稱
  • FS:欄位分隔符
  • RS:記錄分隔符
  • OFS:輸出欄位分隔符
  • ORS:輸出記錄分隔符

下面是一個顯示如何列印檔名和行數的示例:

[root@localhost ~]# awk 'END {print "File" , FILENAME , "contains" , NR , "lines."}' teams.txt 
File teams.txt contains 5 lines.
總結

Awk是最強大的文字處理工具之一。

本文原創地址: 編輯:逄增寶,稽核員:逄增寶


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2726446/,如需轉載,請註明出處,否則將追究法律責任。

相關文章