2013-09-23 2 views
0
find ./2012 -type f | cut -d '/' -f 5 | uniq 

Обычным имена файлов похожипочему уник не дают не-продублированные результаты

./2012/NY/F/Zoe 
./2012/NJ/M/Zoe 

Я полагаю, что выше команда должна дать не-дублирует результат имен файлов, как Zoe только на этот раз, но это получается не так.

Почему? и как мне написать, чтобы получить желаемый результат?

+2

'uniq' сравнивает поэтапно, поэтому, если вы обманываете, то ваш материал' cut' не фильтрует соответствующие части должным образом. Также могут быть невидимые пробелы (вкладки, пробелы и т. Д.) После имен, которые отбрасывают вещи. –

ответ

3

uniq только обнаруживает дубликаты, если они находятся в последовательных линиях. Обычная идиома - sort | uniq, чтобы гарантировать, что все дубликаты будут отображаться вместе.

+1

Вы также можете использовать опцию '-u' для сортировки, чтобы она удаляла обманы. – Barmar

1

uniq требует, чтобы дубликаты были смежными, что означает, что вам необходимо отсортировать входные данные, что означает, что вы также можете использовать sort -u;

find 2012 -type f | cut -d/ -f5 | sort -u 
Смежные вопросы