edita o arquivo no shell script

-2

Sou novo no Linux. Estou executando um pacote de simulação no Linux. Para cada iteração, um arquivo como abaixo será gerado. Eu preciso fazer algumas modificações e, em seguida, usar o arquivo modificado como uma entrada para a próxima iteração. Eu quero terminar esta modificação pelo script de shell, então eu não preciso fazê-lo manualmente após cada iteração. A modificação é a seguinte: Existem coordenadas xyz da 9ª linha (abaixo de Direct). A terceira coluna de cada linha deve ser multiplicada por uma constante (digamos, 1,03).

Como devo fazer isso no script de shell? Eu posso fazer isso no MATLAB, mas não estou familiarizado com os comandos no linux.

Obrigado!

#### o arquivo gerado inicia na próxima linha

POSCAR for FCC Cu (created manually) 

   1.00000000000000

   7.6799999999999997    0.0000000000000000    0.0000000000000000

   3.8399999999999999    6.6509999999999998    0.0000000000000000

   0.0000000000000000    0.0000000000000000   41.0000000000000000
  72  40  40

Selective dynamics

Direct

  0.0000000000000000  0.0000000000000000  1.0000000000000000   F   F   F 

  0.9999979999999979  0.3328410000000019  1.0000000000000000   F   F   F

  0.9999960000000030  0.6656819999999968  0.0000000000000000   F   F   F

  0.3328369999999978  0.0000000000000000  0.0000000000000000   F   F   F

  0.3328360000000004  0.3328410000000019  2.0000000000000000   F   F   F

  0.3328339999999983  0.6656819999999968  3.0000000000000000   F   F   F

  0.6656750000000002  0.0000000000000000  5.0000000000000000   F   F   F

  0.6656729999999982  0.3328410000000019  2.0000000000000000   F   F   F

  0.6656710000000032  0.6656819999999968  1.0000000000000000   F   F   F
    
por user293303 13.06.2014 / 20:18

1 resposta

0

Para modificar o 3º campo separado por espaço em todas as linhas não vazias abaixo do 9º, preservando a formatação do número, você poderia fazer algo como

awk 'NR>9 && NF {$3=sprintf("%.16f",$3*1.03);} 1' file

Observe que, na verdade, ele não verifica se $3 é um campo numérico antes de tentar multiplicá-lo.

    
por steeldriver 13.06.2014 / 21:24