使用 Awk 處理多個輸入檔案


簡介

Awk 是一種功能強大的文字處理工具,開發人員、系統管理員和分析師廣泛使用它來以各種方式處理資料。它是一個多功能的工具,可以處理文字檔案、提取資料並將其轉換為各種格式。Awk 的關鍵特性之一是能夠同時處理多個輸入檔案,使其成為批處理任務的理想選擇。在本文中,我們將探討如何使用 Awk 處理多個輸入檔案,並檢查一些在實踐中如何使用它的示例。

使用 Awk 處理多個輸入檔案

Awk 是一種命令列工具,旨在處理文字檔案。預設情況下,Awk 從標準輸入 (stdin) 讀取輸入,可以從檔案重定向或從另一個命令管道化。但是,Awk 也可以同時處理多個輸入檔案,這對於批處理任務很有用。

在處理多個輸入檔案時,Awk 將每個檔案視為一個獨立的輸入資料流。它按順序讀取每個檔案,依次處理每個檔案的輸入資料。這意味著,如果您有多個包含相同型別資料的檔案,您可以使用 Awk 一次性處理所有這些檔案,而無需分別處理每個檔案。

從多個輸入檔案讀取資料

要從多個輸入檔案讀取資料,您可以在執行 Awk 時將檔名指定為引數。例如,假設您有兩個檔案 file1.txt 和 file2.txt,它們包含以下資料:

file1.txt

apple
banana
orange

file2.txt

carrot
potato

您可以使用 Awk 讀取這兩個檔案中的資料並將其列印到螢幕上,使用以下命令:

awk '{print}' file1.txt file2.txt

此命令告訴 Awk 讀取 file1.txt 和 file2.txt 中的資料並將其列印到螢幕上。'{print}' 命令用於指定 Awk 應該對每行輸入資料執行的操作,在本例中,是將其列印到螢幕上。

合併來自多個輸入檔案的資料

使用 Awk 處理多個輸入檔案的另一種方法是將檔案中的資料合併到單個輸出流中。如果您有多個包含相關資料的檔案並且想要將其合併到單個數據集中,這將很有用。為此,您可以使用 cat 命令連線檔案,然後將輸出傳遞到 Awk。

例如,假設您有兩個檔案 file1.txt 和 file2.txt,它們包含以下資料:

file1.txt

1,apple
2,banana
3,orange

file2.txt

1,carrot
2,potato

您可以使用以下命令將這兩個檔案中的資料合併到單個輸出流中:

cat file1.txt file2.txt | awk -F ',' '{print $1,$2}'

此命令使用 cat 命令將 file1.txt 和 file2.txt 連線到單個輸出流中。然後將輸出流傳遞到 Awk,Awk 使用 -F 選項將逗號 (',') 作為欄位分隔符。'{print $1,$2}' 命令用於列印每行輸入資料的第一和第二欄位,並用空格分隔。

處理來自多個輸入檔案的資料 −

處理來自多個輸入檔案的資料可能涉及各種操作,例如過濾、排序和聚合。Awk 提供了廣泛的內建函式,可用於執行這些操作,使其成為強大的資料處理工具。

例如,假設您有兩個檔案 file1.txt 和 file2.txt,它們包含以下資料:

file1.txt

1,apple,0.5
2,banana,0.4
3,orange,0.3

file2.txt

1,carrot,0.2
2,potato,0.1

您可以使用 Awk 處理這兩個檔案中的資料並計算所有水果和蔬菜的總重量,使用以下命令:

awk -F ',' '{if ($2 == "apple" || $2 == "banana" || $2 == "orange") sum += $3; else sum += 0.0} END {print sum}' file1.txt file2.txt

此命令使用 -F 選項指定逗號 (',') 作為欄位分隔符。然後,它使用 if 語句從 file2.txt 中過濾掉非水果資料並計算這兩個檔案中所有水果的總重量。sum 變數初始化為零,並且對於與水果條件匹配的每一行輸入資料,它都會遞增。END 塊用於列印 sum 的最終值。

使用 Awk 處理多個輸入檔案的示例

計算目錄中所有檔案的大小總和

假設您想要計算目錄及其子目錄中所有檔案的大小總和。您可以使用以下命令生成目錄及其子目錄中所有檔案的列表,然後將輸出傳遞到 Awk 以計算總大小:

find /path/to/directory -type f -print0 | xargs -0 ls -l | awk '{sum += $5} END {print sum}'

此命令使用 find 命令生成目錄及其子目錄中所有檔案的列表,並使用 xargs 命令將列表傳遞到 ls -l 以生成每個檔案的詳細列表。然後將 ls -l 的輸出傳遞到 Awk,Awk 使用 $5 欄位以位元組為單位計算所有檔案的大小總和。END 塊用於列印 sum 的最終值。

合併兩個 CSV 檔案

假設您有兩個包含相關資料的 CSV 檔案,並且想要將其合併到單個 CSV 檔案中。您可以使用以下命令合併檔案並將結果輸出到新檔案

awk 'FNR==1 && NR!=1 {next;}{print}' file1.csv file2.csv > merged.csv

此命令使用 FNR 和 NR 內建變數來確保標題行僅在輸出檔案中包含一次。第一個檔案正常處理,但如果當前行號 (FNR) 等於 1 並且總行號 (NR) 不等於 1,則跳過第二個檔案。然後將結果輸出重定向到一個新檔案 merged.csv。

結論

Awk 是一種功能強大的文字處理工具,可用於處理多個輸入檔案。它提供了一系列廣泛的內建函式,可用於以各種方式處理資料,使其成為批處理任務的理想選擇。透過組合多個輸入檔案,Awk 可以幫助您簡化資料處理工作流程並提高資料分析任務的效率。

更新於: 2023-03-24

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.