como agrupar as informações dentro do primeiro arquivo com base nas informações de um segundo arquivo?

0

Eu tenho dois arquivos:

File1:

234 235 283
567 
1001 
1002 1009


file2:

234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2

I want in the output the rows in file2 be grouped similar to file 1:

output:
234 235 283   567   1001   1002 1009
1 1 2          1     2      0 1
0 0 0          0     0      2 2
1 2 2          2     2      2 2

e na saída final não deve haver nenhum espaço entre os dígitos de um gruop e a primeira linha não deve estar mais lá:  saída final:

112 1 2 01
000 0 0 22
122 2 2 22

alguma sugestão por favor?

    
por zara 10.08.2016 / 00:26

1 resposta

2
$ awk 'FNR==NR{n+=NF;a[n]=" ";next} FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}' file1 file2
112 1 2 01 
000 0 0 22 
122 2 2 22 

Como funciona

Primeiro, lemos file1 e usamos o número de campos em cada linha para determinar onde os espaços devem ser inseridos na saída. Então, lemos o arquivo2 e inserimos os espaços.

  • FNR==NR{n+=NF;a[n]=" ";next}

    Este comando é executado ao ler o primeiro arquivo. NF é o número de campos na linha atual. n é o número cumulativo de campos visualizados. Inserimos um espaço na matriz a para cada n . (Outros valores serão padronizados para uma string vazia).

  • FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}

    Para as linhas após a primeira, imprimimos cada campo numerado i seguido por a[i] . Quando imprimimos todos os campos nessa linha, usamos print para imprimir um caractere de nova linha.

por 10.08.2016 / 01:16

Tags