usando o awk para editar um arquivo baseado em um segundo arquivo

0

Oi eu tenho um arquivo com um conjunto de números que eu quero editar uma linha sempre que esses números aparecem na primeira coluna do segundo arquivo.

a.inp

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
     5     1  1000  1000  1000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
    15     1  1000  1000  1000
    17     1  1000  1000  1000
    20     1  1000  1000  1000
...

b.inp

    5
   15
   29
   48
   72
   87
...

saída

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
     5     1  100000  100000  100000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
    15     1  100000  100000  100000
    17     1  1000  1000  1000
    20     1  1000  1000  1000
...

meu código não funciona por algum motivo?

awk 'NR == FNR { lines[$1]; next } 
$1 in lines { for (col = 3; col <= NF; ++col) $col *= 100 } 1' b.inp a.inp > new.inp
    
por Sarah Aria 12.07.2018 / 20:13

1 resposta

2

Eu só posso reproduzir o que você está vendo se eu converter b.inp em um arquivo de texto do DOS.

Se você editou os arquivos com um editor de texto do Windows ou os produziu em um sistema Windows, eles podem ser ambos arquivos de texto do DOS.

Converta-os em arquivos de texto Unix com o utilitário dos2unix .

Se b.inp for um arquivo de texto do DOS, o código awk incluirá o retorno de carro no final das linhas no valor de $1 no primeiro bloco. Esses retornos de carro causariam mais tarde que $1 in lines (onde $1 vem de a.inp ) nunca fosse verdadeiro.

Convertendo os arquivos para arquivos de texto Unix, seu código produz

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
5 1 100000 100000 100000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
15 1 100000 100000 100000
    17     1  1000  1000  1000
    20     1  1000  1000  1000
    
por 12.07.2018 / 21:13

Tags