Linux系統AWK程式語言指南


簡介

AWK是一種用於Linux文字處理的指令碼語言。它旨在操作文字檔案中的資料,是進行資料分析和管理任務的理想工具。AWK擁有眾多內建函式和運算子,可以執行簡單的搜尋和替換任務,或進行復雜的資料轉換。其簡潔的語法和多功能性使其易於操作文字檔案。對於在Linux環境中處理文字檔案的人來說,AWK是一個強大的工具。

讓我們提供一份Linux系統AWK程式語言的初學者指南。我們將介紹該語言的基本語法、使用AWK可以執行的不同型別的操作以及如何使用AWK處理文字檔案。我們還將為所介紹的每個操作提供程式碼示例和輸出。

在Linux作業系統中安裝AWK

一種安裝方法是利用Linux發行版提供的包管理器。安裝命令如下:

$ sudo apt-get install gawk

安裝後,我們可以檢查Linux中AWK的版本:

$ awk --version

如果AWK已安裝,該命令將顯示版本號。

AWK程式語言中的變數

AWK提供許多可在模式和操作中使用的內建變數。最常用的變數是:

  • NR - 表示當前記錄(行)號

  • NF - 表示輸入記錄中欄位的總數。

  • $0 - 整個當前記錄。

  • $1, $2, $3, … - 當前記錄中的第一、第二、第三……個欄位。

除了這些內建變數外,AWK還允許使用者定義變數。可以使用 = 運算子為使用者定義的變數賦值。

AWK命令列選項

AWK通常使用awk命令從命令列呼叫,該命令接受各種選項和引數。以下是常用選項的列表:

  • -F - 指定輸入檔案的欄位分隔符。

  • -v - 為變數設定值。

  • -f - 指定要執行的AWK指令碼檔案。

  • -n - 停用自動列印行。

  • -W - 啟用警告。

使用AWK從檔案中提取欄位

假設我們有一個名為“filename.csv”的CSV檔案,其格式如下:

name, age, gender
Papan, 22, Male
Priya, 27, Female

要提取年齡和性別欄位,可以使用以下命令:

$ awk -F, '{ print $2, $3 }' filename.csv

此AWK程式碼將列印名為“filename.csv”的CSV檔案的第二和第三個欄位(列),分隔符為逗號(',')。

解釋如下:

  • ‘awk’ - 用於執行AWK指令碼的命令

  • ‘-F,’ - 此選項將欄位分隔符設定為逗號。這告訴AWK將CSV檔案視為欄位之間以逗號作為分隔符。

  • “ ' { print $2, $3 }' ” - 這是AWK指令碼本身。它告訴AWK列印檔案中每一行的第二和第三個欄位,用空格分隔。

age gender
22 Male
27 Female

此命令將欄位分隔符設定為逗號 (-F,) 並列印檔案中每一行的第二和第三個欄位 ($2, $3)。

使用AWK命令過濾資料

我們有一個名為“data.txt”的檔案,其中包含學生的資訊,例如他們的姓名、年齡和成績。我們想只篩選出成績為“A”的學生。

示例

將以下內容放入“data.txt”檔案:

John, 18, A
Sara, 19, B
Mike, 20, A
Lisa, 18, C
Tom, 19, A

要篩選出成績為“A”的學生,可以使用以下AWK命令:

$ awk '$3=="A" {print}' data.txt

輸出

John, 18, A
Mike, 20, A
Tom, 19, A

我們可以看到,只有成績為“A”的行被打印出來。

示例

我們也可以在AWK命令中使用if語句來執行更復雜的篩選。例如,如果我們只想篩選出年齡大於18歲且成績為“A”的學生,可以使用以下AWK命令:

$ awk '$2>18 && $3=="A" {print}' data.txt

輸出

Mike, 20, A
Tom, 19, A

我們可以看到,只有滿足這兩個條件的行才被打印出來。

使用AWK命令實現for迴圈

有三種迴圈:

  • while迴圈

  • do-while迴圈

  • for迴圈

這裡我們只實現“for迴圈”。

首先建立一個名為“input.txt”的檔案,並將以下內容放入其中:

Soumen,25
Bob,30
Papan,22
Aditya,40
Joy,35

現在,讓我們探討如何在AWK中使用迴圈來處理此檔案中的資料。

建立另一個名為“program.awk”的檔案

以下AWK程式使用for迴圈列印檔案的每一行:

{
   for (i = 1; i <= NF; i++) {
      printf("%s ", $i);
   }
   printf("
"); }

在此程式中,模式為空,這意味著操作將應用於檔案的每一行。操作包含一個for迴圈,該迴圈使用NF(欄位數)變數迭代行的每個欄位(列)。在迴圈內,printf函式用於列印每個欄位後跟一個空格。迴圈結束後,printf函式再次用於列印換行符。

要執行此程式,可以使用以下命令:

$ awk -F, -f program.awk input.txt

其中“program.awk”是AWK程式的檔名,“-F,”指定欄位分隔符為逗號。

Soumen,25
Bob,30
Papan,22
Aditya,40
Joy,35

我們可以看到它列印了“input.txt”檔案中的所有行。

結論

本文介紹了Linux上的AWK程式語言,提供了實際的程式碼示例及其相應的輸出。AWK是用於處理文字資料和從中提取相關資訊的高效工具。本指南涵蓋了AWK的基本程式設計概念,包括迴圈。掌握這些知識後,我們將能夠在Linux上建立我們自己的AWK程式。

更新於:2023年3月29日

瀏覽量:231

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告