統計 Linux 文字檔案中重複的行


引言

在 Linux 系統中,可能出於以下原因需要統計文字檔案中重複行的數量:例如,您可能希望找出資料中是否存在任何錯誤,或者希望透過刪除重複項來最佳化檔案。無論出於何種原因,Linux 提供了多種可用於此目的工具和命令。

準備工作

在深入介紹這些命令之前,讓我們先建立一個文字檔案,其中包含一些重複行,我們可以使用這些重複行進行測試。開啟一個終端,使用 touch 命令建立新檔案:

$ touch "test.txt"

接下來,在您最喜歡的文字編輯器中開啟該檔案 (nano、vim 等),並新增以下行:

Hello
World
Hello
Linux
Linux

儲存並關閉檔案,但保持終端處於開啟狀態。

方法 1:使用 Uniq 命令

uniq 命令是一個實用工具,可以從文字檔案中過濾掉重複的相鄰行。它可以透過傳遞 “-c” 標誌來統計重複行的數量,這將導致每行的前面加上它在輸入中出現的次數。

要使用 uniq 統計 test.txt 檔案中重複行的數量,我們可以使用以下命令:

$ uniq -c test.txt
   2 Hello
   1 World
   2 Linux

如您所見,輸出顯示 “Hello” 行出現 兩次,“World” 行出現 一次,“Linux” 行出現 兩次。

方法 2:一起使用 Sort 和 Uniq 命令

計算文字檔案中重複行的另一種方法是同時使用sortuniq命令。sort命令對文字檔案中的行進行排序,而uniq命令篩選出重複的相鄰行。要使用這些命令計算重複行的數量,我們可以先使用sort命令對“test.txt”檔案中的行進行排序

$ sort test.txt
Hello
Hello
Linux
Linux
World

然後,我們可以使用帶“-c”標誌的uniq命令來計算重複行的數量 -

$ sort test.txt | uniq -c
   2 Hello
   2 Linux
   1 World

正如你所看到的,輸出顯示“Hello”行出現兩次,“Linux”行出現兩次,“World”行出現一次。

方法3:使用Awk命令

awk命令是處理文字檔案的強大工具。它可用於計算文字檔案中重複行的數量,變數NR儲存讀取到現在為止的記錄(行)的數量,顯示陣列儲存已經看到的行的列表。

要使用awk計算重複行的數量,我們可以使用以下命令-

$ awk '{ if (seen[$0]++) { count++; } } END { print count }' test.txt
2

正如你所看到的,輸出顯示“test.txt”檔案中2行重複。

方法4:使用Grep和wc命令

計算文字檔案中重複行的另一種方法是同時使用grepwc命令。grep命令查詢匹配特定模式的行,而wc命令計算檔案中的行、單詞和位元組的數量。要使用這些命令計算重複行的數量,我們可以先使用grep從“test.txt”檔案中提取重複的行-

$ grep -w -f <(grep -w -o -e . test.txt | sort | uniq -d) test.txt
Hello
Linux

括號中的grep命令查詢唯一行(-u標誌)並只顯示行的匹配部分(-o標誌)。然後將輸出傳遞給sort,對行進行排序,uniq “-d”,篩選出非重複行。然後將重複行的結果列表傳遞給外部grep命令,在“test.txt”檔案中查詢這些行。

然後我們可以使用wc命令和“-l”標誌計算行的數量 -。

$ grep -w -f >(grep -w -o -e . test.txt | sort | uniq -d) test.txt | wc -l
2

正如你所看到的,輸出顯示“test.txt”檔案中2行重複。

結論

在本文中,我們學習瞭如何使用uniq、sort、grepawk命令在Linux系統上計算文字檔案中重複行的數量。這些方法各有優缺點,你可以選擇最適合自己需求的方法。無論選擇哪種方法,重要的是要記住這些命令只是Linux上可用於處理文字檔案的眾多工具中的幾個。還有許多其他命令和實用工具可用於處理和分析文字資料,學習如何有效地使用它們可以極大地提高你作為Linux使用者的生產力和效率。

更新於: 17-1-2023

14K+次檢視

開啟您的 職業

完成課程以獲得認證

開始
廣告
© . All rights reserved.