Ввод (как описано в вопросе, есть несколько двойных пустых строк):
cat input
* Mon Jan 29 2001 Bernhard Rosenkraenzer <bero@mail.com>
- Some fixes to init scripts
* Wed Jan 17 2001 Bernhard Rosenkraenzer <bero@mail.com>
- Add missing man pages, fix up init script (Bug #17676)
- Can be patched in for future release.
* Thu Feb 1 2001 Trond Eivind Glomsrød <teg@mail.com>
- Fix check for ipchains
Команда:
cat -s input | awk '!/^$/{printf $0;next}{print}' | sort -n -t" " -k5 -k3M -k4 | sed 's/- /\n- /g;s/$/\n/'
Вывод:
cat -s input | awk '!/^$/{printf $0;next}{print}' | sort -n -t" " -k5 -k3M -k4 | sed 's/- /\n- /g;s/$/\n/'
* Wed Jan 17 2001 Bernhard Rosenkraenzer <bero@mail.com>
- Add missing man pages, fix up init script (Bug #17676)
- Can be patched in for future release.
* Mon Jan 29 2001 Bernhard Rosenkraenzer <bero@mail.com>
- Some fixes to init scripts
* Thu Feb 1 2001 Trond Eivind Glomsrød <teg@mail.com>
- Fix check for ipchains
(обратите внимание, что пустые двойные строки были удалены)
Пояснения:
cat -s input
удалит последовательные пустые строки (если у вас их нет во входном файле, вы можете удалить эту часть команды) awk '!/^$/{printf $0;next}{print}'
согнет строки без добавления дополнительных символов, просто напечатавстрока без \n
, когда строка не пуста и когда она пуста, она только добавит EOL
char sort -n -t" " -k5 -k3M -k4
вашу операцию сортировки sed 's/- /\n- /g;s/$/\n/'
, чтобы отделитьстрок, как они были до awk
, добавив \n
перед шаблонами, начинающимися с -
и добавив \n
в конце каждой строки, чтобы воссоздать пустые строки.