Сawk
:
awk '{a[NR%4] = a[NR%4] (NR<=4 ? "" : ",") $0}
END{for (i = 1; i <= 4; i++) print a[i%4]}' < input.txt
попробуй:
sed '4,$ {/^$/d}' infile
начать с 4-й -й строки до конца файла, удалить пустые строки.
Проблема с вашей командой заключается в том, что вы снова заменяете пустую строку пустой строкой в s~^$~~g
(, которая совпадает с s~^$~~
), и вы ее не удаляете.
Обратите внимание, :также, поскольку вы используете другой разделитель, отличный от косой черты по умолчанию /
, для использования этого стиля ~^$~d
вам нужно экранировать первый ~
, чтобы сообщить sed
, что он не является частью вашего регулярного выражения:
sed -e '4,${ \~^$~d }' infile
см.man sed
в разделе «Адреса» об этом:
\cregexpc Match lines matching the regular expression regexp. The c may be any character.
Если вы хотите удалить пустые строки, а также строки, содержащие только пробелы (Табуляции/Пробелы ), вы можете сделать:
sed '4,${ /^[[:blank:]]*$/d }' infile