Это легко сделать с помощью awk путем переопределения разделителя полей и разделителя записей.
Прежде всего, важно понимать, что две наиболее важные концепции awk - это записи и поля .
Вход, который подается в awk через различные средства (stdin
или getline
), читается запись по запись , где каждая запись отделена разделителем записей, который определяется RS
.Поскольку RS
по умолчаниюсимвол \n
, запись на самом деле является строкой, и поэтому awk обрабатывает файл по умолчанию для файла по умолчанию.
Когда запись / строка считывается, awk разделяет запись на поля, где каждое поле отделеноразделителем полей FS
(который может быть регулярным выражением).По умолчанию разделитель полей FS
установлен в любой последовательности символов.Это означает, что по умолчанию каждое поле является словом.Если вы переопределите FS
, поля будут другими.
Специальный разделитель записей - пустой RS=""
, так как он определяет RS
и FS
ЕслиRS
равно нулю, тогда записи разделяются последовательностями, состоящими из плюс одна или несколько пустых строк, начальные или конечные пустые строки не должны приводить к пустым записям в начале или конце ввода, а всегда должен быть разделителем полей, независимо от значения FS
.
источник: awk Стандарт POSIX
Так что вы можете просто сделать следующее:
awk 'BEGIN{RS="";ORS="\n\n"}(NF>1)' file