awk命令使用實例

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是最強大的文本處理工具之一。

本文原創地址:https://www.linuxprobe.com/awk-cmd-example.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章