Vamos considerar este arquivo de teste com matrizes de 3 linhas cada:
$ cat File
1 2
3 4
5 6
a b
c d
e f
A B
C D
E F
Agora, vamos concatenar as matrizes:
$ awk -v nr=3 '{a[NR]=$0} END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}' File
1 2 a b A B
3 4 c d C D
5 6 e f E F
No seu arquivo de dados, existem 128 linhas por matriz. Nesse caso, execute:
awk -v nr=128 '{a[NR]=$0} END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}' File
Como funciona
-
-v nr=128Isso define a variável
nrcomo o número de linhas por matriz. -
a[NR]=$0NRé o número da linha. Nós salvamos cada linha (linha) na matriza. -
END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}Depois de lermos todas as linhas, elas são gravadas novamente na forma desejada.
Para fazer isso, fazemos um loop pela variável
i, começando comi=1e terminando comi=nr. Para cadai, imprimimos a nova linhai. Para cada valori, fazemos um loop sobrej, em quejé o número da linha do arquivo antigo que pertence à linhaido novo arquivo '.
Variação
Embora seja mais difícil para um iniciante ler, uma declaração ternária pode ser usada para dar uma pequena melhora na formatação:
$ awk -v nr=3 '{a[NR]=$0} END{for (i=1;i<=nr;i++) for (j=i;j<=NR;j+=nr) printf "%s%s",a[j],(j+nr<=NR?" ":"\n")}' File
1 2 a b A B 11 22
3 4 c d C D 33 44
5 6 e f E F 55 66
j+nr<=NR?" ":"\n" é uma declaração ternária . Retorna um espaço se j+nr<=NR . Caso contrário, retorna uma nova linha.