複習下Linux去除重複項命令uniq

語言: CN / TW / HK

uniq也是linux管道命令家族中的一員,其主要功能是去除重複項。在介紹uniq命令之前,我們先來新建在下面的案例中需要用到的檔案/tmp/uniq.txt,內容如下

預設情況下uniq只會檢索相鄰的重複資料從而去重。在/tmp/uniq.txt中雖然“onmpw web site” 有三條,但是其中一條是和其他兩條不相鄰的,所以只去重了一條,同理“error php function”也是這種情況。

鑑於以上的檢索機制,所以uniq一般情況下要和sort命令一塊兒使用。

# sort 1.txt | uniq

alpha css web
cat linux command
error php function
hello world
onmpw web site
recruise page site
repeat no data
wello web site

現在再看是不是所有的重複項都已經經過去重處理了。

好了,小試牛刀一把以後,下面我們開始對uniq命令的選項進行簡單的介紹。

-c 統計每一行資料的重複次數

sort 1.txt | uniq -c
alpha css web
cat linux command
error php function
hello world
onmpw web site
recruise page site
repeat no data
wello web site

我們看 “error php function”出現了兩次,“onmpw web site”出現了三次。其餘的都沒有重複項所以為1。

-i 忽略大小寫

在1.txt中新增一行資料 “Error PHP function”

cat 1.txt

alpha css web
cat linux command
error php function
hello world
onmpw web site
onmpw web site
wello web site
Error PHP function
recruise page site
error php function
repeat no data
onmpw web site

 

sort 1.txt | uniq –c
alpha css web
cat linux command
error php function
Error PHP function
hello world
onmpw web site
recruise page site
repeat no data
wello web site

我們看結果,uniq預設是區分大小寫的。使用-i可以忽略掉大小寫問題

sort 1.txt | uniq –c –i
alpha css web
cat linux command
error php function
hello world
onmpw web site
recruise page site
repeat no data
wello web site

現在再看是不是大小寫已經忽略掉了。

-u 只輸出沒有重複的資料

sort 1.txt | uniq –iu

alpha css web
cat linux command
hello world
recruise page site
repeat no data
wello web site

看到沒,結果中的“error php function”和“onmpw web site”都沒有被輸出。

-w N 表示從第一個字元開始只檢索N個字元來判重。

sort 1.txt | uniq –iw 2

alpha css web
cat linux command
error php function
hello world
onmpw web site
recruise page site
wello web site

這裡我們讓uniq只對前兩個字元進行檢索,recruit 和 repeat前兩個字元都是re,所以這兩行也被認為是重複的。

-f N 表示略過前面N個欄位,從第N+1個欄位開始檢索重複資料。以空格符或者tab鍵為分隔符。

sort 1.txt | uniq –icf 2
alpha css web
cat linux command
error php function
hello world
onmpw web site
repeat no data
wello web site

我們在結果中可以看到,這是略過前面的2個欄位,從第三個欄位開始判重的。“recruise page site” 和 “onmpw web site”的第三個欄位相同,所以被認為是相同的資料。但是我們看到,“wello web site”和“onmpw web site”不但第三個欄位相同,第二個也相同。那為什麼它不被計入“onmpw web site”的重複資料中呢。對於這個問題就要回到前面說的,uniq只檢測相鄰的資料是否是重複的。

要解決這個問題還需要在sort命令上著手。還記得sort命令的-k選項嗎,沒錯,我們就用它來解決。

sort –k 2 1.txt | uniq –icf 2
alpha css web
cat linux command
repeat no data
recruise page site
error php function
onmpw web site
hello world

我們看,是不是解決了。

-s N表示略過前面N個字元,關於這個選項的例子我們這裡就不再舉了,該選項和-f N的用法差不多。只不過-f N是略過前面N個欄位;-s是略過前面N個字元。

-d 只輸出有重複項的第一條的資料。

sort 1.txt | uniq -idw 2

repeat no data
error php function
onmpw web site

結果只有這三條。為什麼會有“repeat no data”這條資料,這裡注意-w 2的應用。

-D 對於重複項全部輸出

sort 1.txt | uniq –iDw 2

repeat no data
recruise page site
error php function
error php function
Error PHP function
onmpw web site
onmpw web site
onmpw web site

好了,關於uniq的選項的所有常用的命令已經都介紹完了。關於uniq更詳細的資訊可以使用命令info uniq。

以上內容希望幫助到大家,更多PHP大廠PDF面試文件,PHP進階架構視訊資料,PHP精彩好文免費獲取可以關注公眾號:PHP開源社群,或者訪問:

2021金三銀四大廠面試真題集錦,必看!

騰訊一面的Redis秒殺面試題你會麼?

四年精華PHP技術文章整理合集——PHP框架篇

四年精華PHP技術文合集——微服務架構篇

四年精華PHP技術文合集——分散式架構篇

四年精華PHP技術文合集——高併發場景篇

四年精華PHP技術文章整理合集——資料庫篇