一篇文章入門Unix中的AWK命令!

語言: CN / TW / HK

AWK Command in Unix

Unix中的AWK命令簡介

Unix Shell指令碼中的AWK命令是用來改變資料的形式和生成報告的。我們可以使用數字函式、邏輯運算子、變數和字串函式來處理資料,而無需編譯。AWK命令通常用於處理資料和掃描檔案中的模式。它試圖掃描一個或多個檔案,檢查其是否包含與所需的指定模式相匹配的模式,最後對其進行所需的操作。AWK命令是由三個人的名字首字母命名的--Aho、Weinberger和Kernighan。他們來自AT&T貝爾實驗室,也在Unix Shell指令碼中貢獻了許多其他命令列提示。

AWK命令用於執行以下操作

  • 定義變數。
  • 使用數字函式或邏輯/算術運算子、變數或字串。
  • 應用迴圈或控制流動作。
  • 生成報告。

AWK命令的基本語法

awk [options] [program] [file]

我們可以通過AWK命令做什麼?

以下是在Unix中我們可以用AWK命令進行的操作列表。

  • AWK命令最初試圖逐行掃描一個檔案。
  • 將每個輸入檔案劃分為與模式相匹配的欄位。
  • 然後,它試圖將輸入的檔案與指定的模式進行比較。
  • 最後,對匹配的行進行操作。

AWK命令用於轉換資料檔案,然後從中生成報告。它還用於對其進行算術或邏輯運算,以找出匹配的模式。

AWK命令用於執行以下操作。

  • 定義變數。
  • 使用數字函式或邏輯/算術運算子、變數或字串。
  • 應用迴圈或控制流操作。
  • 生成報告。

AWK的語法。

awk [options] [selection action] [input_file]

如何在Unix中使用AWK命令的例子

讓我們考慮有一個名為 "testing.txt "的檔案,該檔案的內容如下。

程式碼

cat testing.txt

輸出

AWK Command in Unix 1

例子#1 - 選項 "print"。

為了列印檔案中的所有內容,awk幫助列印檔案中的所有內容行。在下面的例子中,我們沒有使用任何模式,所以動作適用於檔案中的行。預設情況下,沒有任何模式引數的動作將列印檔案中的全部資料/行。因此,我們可以看到,下面檔案中的所有行都被打印出來了。

語法

awk '{print}' file_name.txt

程式碼

awk '{print}' testing.txt

輸出

AWK Command in Unix 2

例子 #2 - 模式匹配。

要列印檔案中的指定模式,我們可以使用下面的語法。它將列出輸入引數中的匹配模式,並在輸出中列出資料。

語法

awk '/pattern/ {print}' file_name.txt

程式碼

awk '/student/ {print}' testing.txt

輸出

Pattern match

例子 #3 - 分行到欄位。

我們也可以用空白作為預設的分隔符來分割行中的記錄。例如,如果我們在一行中有4個字,它將分別被儲存為1、2、3和4,而0美元將列印完整的一行。

語法

awk '{print $n, $m}' file_name.txt

程式碼

awk '{print $2, $4}' testing.txt

輸出

Splitting lines to fields

變數 Unix中的內建AWK命令

  • NF:帶有NF變數的AWK命令用於計算所傳遞的輸入引數中的欄位數量。
  • RS。帶RS的AWK命令用於儲存當前輸入引數中的記錄分隔符。預設情況下,如果沒有提到指定的變數,新的一行被認為是記錄分隔符。
  • NR:AWK命令及其變數NR有助於計算輸入記錄的數量。一般來說,行被認為是記錄。
  • FS:使用FS命令時,我們需要指定欄位分隔符。預設情況下,如果沒有提到具體的分隔符,空白被認為是分隔符。它用於根據輸入行來劃分欄位。
  • ORS:帶有OFS變數的AWK命令用於儲存輸出記錄分隔符,該分隔符被AWK命令用來列印輸出行。新行字元被視為預設的記錄分隔符。
  • OFS:帶有OFS變數的AWK命令用於儲存AWK列印輸出時的輸出欄位分隔符。空格字元被當作預設的欄位分隔符。

AWK命令中變數的例子

下面是提到的例子。

例子#1 - 變數NF.

當我們想列印檔案中記錄的最後一行時,我們可以使用帶有變數NF的awk命令。

語法

awk '{print $NF}' file_name.txt

程式碼

awk '{print $NF}' testing.txt

輸出

Variable NF

例子#2 - 變數NR。

AWK命令及其變數NR有助於計算輸入記錄的數量。一般來說,行被認為是記錄。

語法

awk '{print $NR <file separator> $n}' file-name.txt

程式碼

awk '{print NR "-" $2}' testing.txt

輸出

AWK Command in Unix 6

例子#3 - 變數OFS。

AWK命令中的OFS變數用於儲存AWK列印輸出時的輸出欄位分隔符。空格字元被視為預設的欄位分隔符。

語法

awk 'OFS=”field_separator” {print $n, $m, $o}

程式碼

date | awk 'OFS="/" {print $2, $3, $6}' date | awk 'OFS="-" {print $2, $3, $6}'

輸出

Variable OFS

例子 #4 - 變數END.

為了計算輸入檔案的行數,我們可以在awk命令中使用END變數,如下所示。

語法

awk 'END {print NR}' file_name.txt

程式碼

awk 'END {print NR}' testing.txt

輸出
AWK Command in Unix 8

例子 #5 - 變數BEGIN.

這個BEGIN變數是用來在任何記錄被執行之前設定動作的。我們也可以在處理記錄之前列印任何我們想列印的資料,如下所示。

語法

awk 'BEGIN { print “print your data”} ' file-name.txt

程式碼

awk 'BEGIN {print "Starting of the line"}; {print $2}; ' testing.txt

輸出

AWK Command in Unix 9

結論

Unix Shell指令碼中的AWK命令用於高階的文字處理。它通常被用於模式匹配和作為報告工具。通過使用awk,我們可以定義一組要在輸入檔案上執行的動作。作為引數傳遞的輸入資料被劃分為欄位和記錄。