dadlin 09.07.2012 22:25
Есть вопрос! — Как удалить дублирующиеся строки?
Как в текстовом файле удалить дублирующиеся строки, не нарушая при этом порядка следования?sort -u это делает, но нарушает порядок следования строк.
uniq -u удаляет обе из каждой найденной пары дублирующихся строк, а мне надо только одну из каждой пары.
kstep 11.07.2012 11:49 #
+ 1 -
perl -ne 'print unless $U{$_};$U{$_}=1;'
Не то.
man uniq говорит: "Filter adjacent matching lines".
Твой пример делает то же самое, что и просто uniq, но со счётчиком повторений в начале, который ты потом некорректно пытаешься cut-ом убрать. Некорректно потому, что не факт что число повторений не будет больше 8 символов, так что тут не общий случай. В итоге твоя строка делает *то же самое*, что и просто uniq, а уникальные строки вразброс всё равно не фильтруются.
man uniq говорит: "Filter adjacent matching lines".
Твой пример делает то же самое, что и просто uniq, но со счётчиком повторений в начале, который ты потом некорректно пытаешься cut-ом убрать. Некорректно потому, что не факт что число повторений не будет больше 8 символов, так что тут не общий случай. В итоге твоя строка делает *то же самое*, что и просто uniq, а уникальные строки вразброс всё равно не фильтруются.
У uniq очень простой алгоритм: сравнить текущую строку с предыдущей, если не равны, вывести текущую строку и запомнить её как "предыдущую", иначе пропустить строку.
При этом uniq -c ещё и ведёт счётчик и выводит последнюю запомненную строку, когда текущая строка не совпадает с запомненной.
Иными словами у uniq память только на одну строку вперёд, а человеку нужно помнить все строки, чтобы получить уникальность без сортировки.
При этом uniq -c ещё и ведёт счётчик и выводит последнюю запомненную строку, когда текущая строка не совпадает с запомненной.
Иными словами у uniq память только на одну строку вперёд, а человеку нужно помнить все строки, чтобы получить уникальность без сортировки.