uniq用來從一個文本中去除或禁止重復的行;sort的-u選項也可以去除重復行。
命令格式:uniq -u[-d[,-c]] -f input_file output_file
-u:只顯示不重復的行
-d:只顯示有重復數據的行,每種重復行只顯示其中一行
-c:打印每一重復行出現次數
-f:n為數字,前n個域被忽略,不識別-f選項的系統使用-n選項
我們來看下面的例子:
有重復數據的文件week.txt
1 Monday
2 Monday
3 Tuesday
4 Tuesday
5 Wednesday
6 Monday
7 TuesDay
8 Thursday
9 Friday
10 Saturday
11 Sunday
12 Friday
重復的數據有Monday(1,2,6),Tuesday(3,4,7),Friday(9,12)。
查看week.txt文件中,重復的行:
uniq -d week.txt
Monday
Tuesday
注意,這裡只顯示重復數據中,Monday和Tuesday這兩行,但是Friday這個重復行並沒顯示。
下面查看不重復的行:
uniq -u week.txt
Wednesday
Monday
TuesDay
Thursday
Friday
Saturday
Sunday
Friday
注意,這裡面包含了出現2次的Friday,他們不是重復數據嗎?
答案:他們確實非重復數據。
我們再看每行重復的次數:
uniq -c week.txt
2 Monday
2 Tuesday
1 Wednesday
1 Monday
1 TuesDay
1 Thursday
1 Friday
1 Saturday
1 Sunday
1 Friday
從這裡,我們看到Monday和Tuesday重復了2次,而Friday就出現了一次,不重復。
原來,AIX將連續出現的相同數據認為是重復數據,
而同樣的數據(Friday),非連續出現,就不認為重復。
這是區別於DB2數據庫中表的重復數據的,DB2數據庫表中,
只要相同的數據,連續或者非連續出現多次,則認為重復。
sort也具有去除重復的功能:
sort -u week.txt
Friday
Monday
Saturday
Sunday
Thursday
Tuesday
TuesDay
Wednesday
uniq命令還可以根據域進行去重。
看下面的例子:
pg parts.txt
AK47 GOOD
DS123 GOOD
ER001 GOOD
顯示每行的出現次數:
uniq -c parts.txt
1 AK47 GOOD
1 DS123 GOOD
1 ER001 GOOD
按照第二個域進行去除重復:
uniq -f2 parts.txt
AK47 GOOD