Jest sobie w shellu polecenie uniq. Zgodnie z opisem w man:
uniq - report or omit repeated lines
Wydawałoby się więc, że przesłanie wyniku polecenia, które generuje jakieś tam wiersze danych, powinno zwrócić tylko unikalne dane. Np.
head /etc/passwd | cut -d : -f7
zwraca informacje o skonfigurowanych shellach dla kilku początkowych użytkowników z pliku /etc/passwd. (Screen poniżej)
Kiedy prześlemy dane do uniq, to wydaje sie, że wynikiem powinny być unikalne shelle:
head /etc/passwd | cut -d : -f7 | uniq
Jednak tak nie jest. Dlaczego? Wystarczy zajrzeć do man-a ponownie, a tam stoi jak byk:
Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).
kluczowe słowo to „adjacent” – 2 linijki zostaną potraktowane jako dublujące się, gdy stoją obok siebie. Jeśli między nimi jest jakaś inna linijka, to uniq nie usunie powtarzającej się kopii, no chyba że…. użyjesz opcji -u:
head /etc/passwd | cut -d : -f7 | uniq -u
Wszystko to widać ładnie na obrazku poniżej: