Кто-нибудь может сказать мне, как я могу заменить атомные номера в первом столбце файла соответствующими атомными символами в скрипте 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
Дайте мне знать, если есть лучший способ получить тот же результат.Спасибо.