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=128
Isso define a variável
nr
como o número de linhas por matriz. -
a[NR]=$0
NR
é 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=1
e 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 à linhai
do 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.