Linux: Bash: uniq – unikalne czy nieunikalne czy co…?

17-paź-2021

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:

 

Komentarze są wyłączone

Autor: Rafał Kraik