tr заменил пробел новой строкой, не давая уникальных значений с помощью uniq

я пытаюсь заменить символы пробела символами новой строки, используя tr, а затем передаю вывод в uniq для отображения уникальных значений, но я не получаю вывод, который я ожидаю. по какой причине только слово «мир» не отображается, так как это уникально?

echo "hello world hello" | tr ' ' '\n' | uniq -u

person rbl651    schedule 22.05.2017    source источник


Ответы (1)


Фильтр uniq будет удалять дубликаты, только если они последовательны. В справочной странице об этом довольно подробно (выделено мной):

Отфильтровать соседние совпадающие строки из INPUT (или стандартного ввода), записать в OUTPUT (или стандартный вывод).

Это означает, что вы почти наверняка захотите отсортировать данные перед передачей их в uniq:

pax> echo "hello world hello" | tr ' ' '\n' | uniq -u
hello
world
hello

pax> echo "hello world hello" | tr ' ' '\n' | sort | uniq -u
world
person paxdiablo    schedule 22.05.2017