天天看點

linux裡面uniq某一列,Linux之uniq 指令示例

導讀

如果你主要是在指令行上工作,并且每天處理大量的文本檔案,那麼你應該了解下 uniq 指令。該指令會幫助你輕松地從檔案中找到重複的行。它不僅用于查找重複項,而且我們還可以使用它來删除重複項,顯示重複項的出現次數,隻顯示重複的行,隻顯示唯一的行等。由于 uniq 指令是 GNU coreutils 包的一部分,是以它預裝在大多數 Linux 發行版中,讓我們不需要費心安裝。來看一些實際的例子。

請注意,除非重複行是相鄰的,否則 uniq 不會删除它們。是以,你可能需要先對它們進行排序,或将排序指令與 uniq 組合以獲得結果。讓我給你看一些例子。

首先,讓我們建立一個帶有一些重複行的檔案:

vi ostechnix.txt

welcome to ostechnix

welcome to ostechnix

Linus is the creator of Linux.

Linux is secure by default

Linus is the creator of Linux.

Top 500 super computers are powered by Linux

正如你在上面的檔案中看到的,我們有一些重複的行(第一行和第二行,第三行和第五行是重複的)。

1、 使用 uniq 指令删除檔案中的連續重複行

如果你在不使用任何參數的情況下使用 uniq 指令,它将删除所有連續的重複行,隻顯示唯一的行。

uniq ostechnix.txt

示例輸出:

linux裡面uniq某一列,Linux之uniq 指令示例

如你所見, uniq 指令删除了給定檔案中的所有連續重複行。你可能還注意到,上面的輸出仍然有第二行和第四行重複了。這是因為 uniq 指令隻有在相鄰的情況下才會删除重複的行,當然,我們也可以删除非連續的重複行。請看下面的第二個例子。

2、 删除所有重複的行

sort ostechnix.txt | uniq

示例輸出:

linux裡面uniq某一列,Linux之uniq 指令示例

看到了嗎?沒有重複的行。換句話說,上面的指令将顯示在 ostechnix.txt 中隻出現一次的行。我們使用 sort 指令與 uniq 指令結合,因為,就像我提到的,除非重複行是相鄰的,否則 uniq 不會删除它們。

3、 隻顯示檔案中唯一的一行

為了隻顯示檔案中唯一的一行,可以這樣做:

sort ostechnix.txt | uniq -u

示例輸出:

Linux is secure by default

Top 500 super computers are powered by Linux

如你所見,在給定的檔案中隻有兩行是唯一的。

4、 隻顯示重複的行

同樣的,我們也可以顯示檔案中重複的行,就像下面這樣:

sort ostechnix.txt | uniq -d

示例輸出:

Linus is the creator of Linux.

welcome to ostechnix

這兩行在 ostechnix.txt 檔案中是重複的行。請注意 -d(小寫 d) 将會隻列印重複的行,每組顯示一個。列印所有重複的行,使用 -D(大寫 D),如下所示:

sort ostechnix.txt | uniq -D

在下面的截圖中看兩個選項的差別:

linux裡面uniq某一列,Linux之uniq 指令示例

5、 顯示檔案中每一行的出現次數

由于某種原因,你可能想要檢查給定檔案中每一行重複出現的次數。要做到這一點,使用 -c 選項,如下所示:

sort ostechnix.txt | uniq -c

示例輸出:

Linus is the creator of Linux.

Linux is secure by default

Top 500 super computers are powered by Linux

welcome to ostechnix

我們還可以按照每一行的出現次數進行排序,然後顯示,如下所示:

sort ostechnix.txt | uniq -c | sort -nr

示例輸出:

welcome to ostechnix

Linus is the creator of Linux.

Top 500 super computers are powered by Linux

Linux is secure by default

6、 将比較限制為 N 個字元

我們可以使用 -w 選項來限制對檔案中特定數量字元的比較。例如,讓我們比較檔案中的前四個字元,并顯示重複行,如下所示:

uniq -d -w 4 ostechnix.txt

7、 忽略比較指定的 N 個字元

像對檔案中行的前 N 個字元進行限制比較一樣,我們也可以使用 -s 選項來忽略比較前 N 個字元。

下面的指令将忽略在檔案中每行的前四個字元進行比較:

uniq -d -s 4 ostechnix.txt

為了忽略比較前 N 個字段(LCTT 譯注:即前幾列)而不是字元,在上面的指令中使用 -f 選項。

欲了解更多詳情,請參考幫助部分:

uniq --help

也可以使用 man 指令檢視:

man uniq

今天就到這裡!我希望你現在對 uniq 指令及其目的有一個基本的了解。如果你發現我們的指南有用,請在你的社交網絡上分享,并繼續支援我們。更多好東西要來了,請繼續關注!

幹杯!

本文由 LCTT 原創編譯,Linux中國 榮譽推出