一、awk基本概念
awk是一種數據處理與報告生成器,其名稱取自它的三個創始人Al Aho、Peter Weinberger和Brian Kernighan的姓氏的首字母。awk與sed一起,被稱為Linux或Unix系統上最強大的文本處理工具。
awk的工作方式類似於其他命令行實用程序,它讀取輸入文件,對包括模式匹配和動作的命令進行操作,並將其輸出到標準輸出(stdout)上。
awk有許多內置函數,包括字元串和數字處理函數、數組和數據結構、時間和日期處理函數等,這使得它成為處理大量文本數據的最佳工具之一。
二、awk命令的基本語法
awk命令的基本語法如下:
awk 'pattern {action}' file
語法中的pattern是一個模式,用於篩選數據的行。如果某行數據符合該模式,則執行對應的action。
action可以為任何一段awk代碼,包括列印、賦值、計算等等。在action中可以使用awk提供的各種函數和運算符。
如果沒有指定pattern,則所有的輸入行都會執行相應的action。
如果沒有指定file,則awk將讀取標準輸入。
三、awk常用命令示例
1. 列印文件中的所有行
如下示例代碼將列印file文件中的所有行:
awk '{print}' file
該命令中沒有指定pattern,因此所有的輸入行都會執行列印操作。
2. 使用空格和製表符分割欄位
awk默認以空格和製表符分割欄位,下面的示例列印file文件中第一個欄位:
awk '{print $1}' file
該命令中的$1表示第一個欄位。
3. 根據模式匹配過濾數據
如下示例代碼將列印file文件中包含「keyword」的行:
awk '/keyword/ {print}' file
該命令中使用了模式匹配,只有輸入行中包含「keyword」的行才會執行列印操作。
4. 使用內置變數
awk提供了一些內置變數,用於控制其行為。下面是一些常用的內置變數:
- FS:輸入行中欄位的分隔符,默認為一個或多個空格或製表符。
- NF:輸入行中欄位的個數。
- NR:已經處理過的行數。
- $0:整個輸入行。
下面的示例代碼使用FS變數將第二個欄位列印出來:
awk -F':' '{print $2}' file
該命令中-F’:’使用冒號作為欄位的分隔符,$2表示第二個欄位。
5. 計算總和和平均值
下面的示例代碼將計算file文件中第二個欄位的總和和平均值:
awk '{sum+=$2} END {print "sum=" sum ", avg=" sum/NR}' file
該命令中sum+=$2表示將第二個欄位的值累加到sum變數中。END表示只在文件處理完畢後執行。NR表示已經處理的行數,因此sum/NR計算出平均值。
四、總結
awk是一個非常強大的文本處理工具,它支持模式匹配、內置函數、計算和各種數據結構等多種功能。使用awk可以輕鬆地處理和篩選大量文本數據,是運維工程師必備的技能之一。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194590.html