Сортировка строк от самых длинных до кратчайших Как я могу переставить все строки в файле от самого длинного до кратчайшего? Например, например: elephant zoo penguin Будет изменено на elephant penguin zoo Ответ 1 Добавить длину строки в качестве первого поля строки, сортировать и удалить длину строки: awk '{ print length($0) " " $0; }' $file | sort -r -n | cut -d ' ' -f 2- Ответ 2 TIM (моя краткая версия для TIMTOWTDI... хмм, но теперь это уже давно: ( perl -ne '@a = <>; print sort { length $b <=> length $a } @a' file позволяет зарезервировать reverse и push при необходимости и мне интересно, сколько времени потребуется на этот файл 550 МБ Ответ 3 С POSIX Awk: { c = length m[c] = m[c] ? m[c] RS $0 : $0 } END { for (c in m) q[++x] = m[c] while (x) print q[x--] } Пример Ответ 4 Perl версия с кончиком шляпы до @thiton: perl -ne 'print length($_)." $_"' file | sort -r -n | cut -d ' ' -f 2- $_ - текущая строка, аналогичная awk $0 perl-5.24 исполнение в файле размером 550 МБ с 6 миллионами строк (British National Corpus) заняло 24 секунды Выполнение @thiton awk (3.1.7) заняло 26 секунд С кончиком шляпы @William Pursell из связанного сообщения: perl -ne 'push @a, $_; END{ print reverse sort { length $a <=> length $b } @a }' file Выполнение perl-5.24 заняло 12,0 секунд
Ответ 1 Добавить длину строки в качестве первого поля строки, сортировать и удалить длину строки: awk '{ print length($0) " " $0; }' $file | sort -r -n | cut -d ' ' -f 2-
Ответ 2 TIM (моя краткая версия для TIMTOWTDI... хмм, но теперь это уже давно: ( perl -ne '@a = <>; print sort { length $b <=> length $a } @a' file позволяет зарезервировать reverse и push при необходимости и мне интересно, сколько времени потребуется на этот файл 550 МБ
Ответ 3 С POSIX Awk: { c = length m[c] = m[c] ? m[c] RS $0 : $0 } END { for (c in m) q[++x] = m[c] while (x) print q[x--] } Пример
Ответ 4 Perl версия с кончиком шляпы до @thiton: perl -ne 'print length($_)." $_"' file | sort -r -n | cut -d ' ' -f 2- $_ - текущая строка, аналогичная awk $0 perl-5.24 исполнение в файле размером 550 МБ с 6 миллионами строк (British National Corpus) заняло 24 секунды Выполнение @thiton awk (3.1.7) заняло 26 секунд С кончиком шляпы @William Pursell из связанного сообщения: perl -ne 'push @a, $_; END{ print reverse sort { length $a <=> length $b } @a }' file Выполнение perl-5.24 заняло 12,0 секунд