Заменить атомные номера в столбце на соответствующие атомные символы в файле - PullRequest
0 голосов
/ 19 сентября 2018

Кто-нибудь может сказать мне, как я могу заменить атомные номера в первом столбце файла соответствующими атомными символами в скрипте bash?У меня есть много файлов для замены таким образом.

file: HCOOH

  6             0        -.134702     .401251    -.000249
  8             0       -1.134262    -.264582     .000069
  8             0        1.118680    -.091075     .000056
  1             0        -.107617    1.495465     .000513
  1             0        1.040484   -1.057714    -.000020

Желаемый результат:

  C             0        -.134702     .401251    -.000249
  O             0       -1.134262    -.264582     .000069
  O             0        1.118680    -.091075     .000056
  H             0        -.107617    1.495465     .000513
  H             0        1.040484   -1.057714    -.000020

Моя цель состоит в том, чтобы извлечь геометрию системы из баз данных эталонных данных, указанных в вспомогательной форме.статьи "J. Chem. Theory Comput., 2005, 1 (3), pp. 415–432 DOI: 10.1021 / ct049851d".Поскольку атомы даны как атомные номера в базах данных, я не могу использовать геометрию непосредственно в коде NWCHEM.Поэтому мне нужно заменить их соответствующими символами.Используя скрипт

    #!/bin/bash
    atoms=(HCOOH H He Li Be B C N O F Ne)
    name="$(awk '{print $1}' HCOOH)"
    rm atom
    for j in ${name};
    do
     echo ${atoms[$j]} >>atom
    done
    awk 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' atom HCOOH | awk '{printf         "%-3s %-1s %10.5f %10.5f %10.5f\n", $1, $2, $3, $4, $5}'

Я получаю

 HCOOH      0.00000    0.00000    0.00000
 C   0   -0.13470    0.40125   -0.00025
 O   0   -1.13426   -0.26458    0.00007
 O   0    1.11868   -0.09108    0.00006
 H   0   -0.10762    1.49547    0.00051
 H   0    1.04048   -1.05771   -0.00002

Мне не удалось избежать появления нулей в первой строке, если требуется форматированный вывод.Я был бы рад, если бы кто-нибудь помог распечатать форматированный вывод без печати нулей в первой строке.

Спасибо.

Наконец-то получили желаемые результаты, используя скрипт

    #!/bin/bash
    atoms=(HCOOH H He Li Be B C N O F Ne)
    name="$(awk '{print $1}' HCOOH)"
    rm atom
    for j in ${name};
    do
     echo ${atoms[$j]} >>atom
    done
    awk 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' atom HCOOH | awk 'NR==1{printf "%-3s\n", $1}' >tHCOOH
    awk 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' atom HCOOH | awk 'NR> 1{printf "%-3s %-1s %10.5f %10.5f %10.5f\n", $1, $2, $3, $4, $5}' >>tHCOOH #| 
    mv tHCOOH HCOOH

, то есть

 HCOOH   
 C   0   -0.13470    0.40125   -0.00025
 O   0   -1.13426   -0.26458    0.00007
 O   0    1.11868   -0.09108    0.00006
 H   0   -0.10762    1.49547    0.00051
 H   0    1.04048   -1.05771   -0.00002

Дайте мне знать, если есть лучший способ получить тот же результат.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...