Sua declaração awk
pode ser melhor compreendida com quebras de linha explícitas
awk '
{ a[NR]=$0 } # Applies to every line of input
END { # Executed once, when there is no more data
b=0;
for (i=1;i<=NR;i++) {
b++;
printf "%s",a[i];
if (b==3) {
print"";
b=0;
}
}
}
' file
Com base em sua exigência de concatenar todas as três linhas de dados, isso parece ser um código muito ineficiente à medida que lê todo o arquivo antes de fazer qualquer processamento.
Tente isso, que apenas armazena três linhas de cada vez:
awk '{s=s $0} NR>1&&!((NR)%3) {print s;s=""}' data
Expandido, parece com isso
awk '
{ s=s $0 } # Append this line to the buffer
NR>1 && !(NR%3) { print s; s="" } # Print the buffer every three lines
' data
A expressão na primeira linha (NR%3)
atinge zero a cada terceira linha. O !
nega isso, portanto, ele só aciona o componente {...}
a cada terceira linha.