Версия для чтения "не так":
awk '($0=$NF x)&&ORS=NR%4?FS:RS' infile
Параметры добавлены в соответствии с запросом OP:
awk '
($0 = $NF x) && ORS = NR % n ? FS : RS
' n="$1" infile
В приведенном выше сценарии я использую $ 1, но вы можете использоватьлюбая переменная shell .
Объяснение следующее:
$0 = $NF
- установить $ 0 (всю текущую входную запись) на текущее значение последнего поля ($ NF).
ORS = NR % n ? FS : RS
- используя троичный оператор:
expression ? return_this_if_true : return_this_otherwise
,
установите для OutputRecordSeparator значение:
, когда NR% n оценивает значение true (т.е. возвращает значениеотличается от 0) установить ORS на текущее значение FS (FieldSeparator - по умолчанию выполняется пробел символов)
в противном случае установить значение RS (по умолчанию используется новая строка)
Символ x (унитарная переменная и, следовательно, строка NULL при использовании в конкатенации) необходим для правильной обработки вывода, когда последнее поле равно 0 (или пустая строка).Это связано с тем, что оператор присваивания в awk фактически в этом случае возвращает присвоенное значение, если $ NF равно 0, остальные логические выражения && будут игнорироваться.