Erro no awk para arquivos de mesclagem

0

Eu tenho dois arquivos:

Arquivo1

212 21  24.8    13.8354303  15.2841303
258 21  22.2    15.8507278  17.2994278
270 21  27.8    13.0482192  14.4969192
204 21  22.4    13.9465939  15.3952939
248 21  16.6    9.2714745   11.6494745
279 21  22.8    12.9151566  15.2931566

Arquivo2

212 21  24.8    1.03    2.8954
258 21  22.2    1.03    2.8954
270 21  27.8    1.05    2.9154
204 21  22.4    1.21    3.0754
248 21  16.6    1.29    3.1554
279 21  22.8    1.47    3.3354

e devo juntar-me a ambos desta forma:

212 21  24.8    13.8354303  15.2841303  1.03    2.8954
258 21  22.2    15.8507278  17.2994278  1.03    2.8954
270 21  27.8    13.0482192  14.4969192  1.05    2.9154
204 21  22.4    13.9465939  15.3952939  1.21    3.0754
248 21  16.6    9.2714745   11.6494745  1.29    3.1554
279 21  22.8    12.9151566  15.2931566  1.47    3.3354

mas usei este comando awk :

awk 'NR==FNR{a[$1]=$4 FS $5;next}$1 in a{print $1,$2,$3,$4,$5,a[$1]}'  File2 File1 > output

e eu peguei este arquivo:

saída

212 21  24.8    13.8354303  15.2841303
1.03    2.8954          
258 21  22.2    15.8507278  17.2994278
1.03    2.8954          
270 21  27.8    13.0482192  14.4969192
1.05    2.9154          
204 21  22.4    13.9465939  15.3952939
1.21    3.0754          
248 21  16.6    9.2714745   11.6494745
1.29    3.1554          
279 21  22.8    12.9151566  15.2931566
1.47    3.3354          

Sou iniciante e não sei o que fiz de errado, alguém tem alguma sugestão? Uma nota, meus arquivos têm cerca de 400 linhas. Muito obrigado!

    
por Greg Rov 08.08.2016 / 17:45

2 respostas

3

Supondo que os dados estão classificados, para o tipo de situação, eu usaria o comando join

join -o 1.1 1.2 1.3 1.4 1.5 2.4 2.5 file1.txt file2.txt 
212 21 24.8 13.8354303 15.2841303 1.03 2.8954
258 21 22.2 15.8507278 17.2994278 1.03 2.8954
270 21 27.8 13.0482192 14.4969192 1.05 2.9154
204 21 22.4 13.9465939 15.3952939 1.21 3.0754
248 21 16.6 9.2714745 11.6494745 1.29 3.1554
279 21 22.8 12.9151566 15.2931566 1.47 3.3354

Você usa -o para definir o formato em x.y style, em que x é o arquivo e y é o campo.

    
por 08.08.2016 / 17:54
0

Por favor, note que para juntar resultado correto, tanto o arquivo1 como o arquivo2 devem ser classificados anteriormente pelo primeiro campo.
Se não houver um caso e você quiser manter a ordem

awk '
    FNR==NR{a[$1]=$4 OFS $5; next}
    $1 in a{print $0, a[$1]}
    ' OFS='\t' file2 file1
    
por 08.08.2016 / 19:53