как написано в заголовке этого поста, я пытаюсь заменить значения в так называемых столбцах B (температурный коэффициент) и / или q (заполненность) файла PDB (банк данных белка), в котором хранятся трехмерные координатыкаждый атом, принадлежащий этому белку.Простой CSV-файл с двумя столбцами - это исходный файл, содержащий такие значения (во втором столбце) для конкретной аминокислоты (порядковый номер в первом столбце)
Краткий пример ограниченного исходного файла (source.csv)к первым двум аминокислотам (в реальном наборе данных их сотни):
1, 11.25
2, 16.49
Соответствующий блок файла назначения (dest.pdb):
ATOM 1 N MET A 1 105.382 119.360 102.631 1.00 0.00
ATOM 2 CA MET A 1 105.155 118.751 103.942 1.00 0.00
ATOM 3 HA MET A 1 104.645 119.496 104.551 1.00 0.00
ATOM 4 CB MET A 1 104.212 117.542 103.804 1.00 0.00
ATOM 5HB1 MET A 1 104.120 117.057 104.775 1.00 0.00
ATOM 6HB2 MET A 1 104.631 116.826 103.095 1.00 0.00
ATOM 7 CG MET A 1 102.801 117.937 103.353 1.00 0.00
ATOM 8HG1 MET A 1 102.862 118.327 102.336 1.00 0.00
ATOM 9HG2 MET A 1 102.436 118.736 103.999 1.00 0.00
ATOM 10 SD MET A 1 101.579 116.590 103.371 1.00 0.00
ATOM 11 CE MET A 1 101.404 116.275 105.156 1.00 0.00
ATOM 12HE1 MET A 1 100.603 115.555 105.325 1.00 0.00
ATOM 13HE2 MET A 1 102.327 115.865 105.565 1.00 0.00
ATOM 14HE3 MET A 1 101.158 117.201 105.676 1.00 0.00
ATOM 15 C MET A 1 106.423 118.387 104.697 1.00 0.00
ATOM 16 O MET A 1 107.511 118.334 104.134 1.00 0.00
ATOM 17 N GLU A 2 106.296 118.095 105.999 1.00 0.00
ATOM 18 H GLU A 2 105.398 118.148 106.454 1.00 0.00
ATOM 19 CA GLU A 2 107.495 117.802 106.786 1.00 0.00
ATOM 20 HA GLU A 2 108.068 118.718 106.664 1.00 0.00
ATOM 21 CB GLU A 2 107.242 117.714 108.295 1.00 0.00
ATOM 22HB1 GLU A 2 106.839 116.732 108.520 1.00 0.00
ATOM 23HB2 GLU A 2 106.494 118.455 108.581 1.00 0.00
ATOM 24 CG GLU A 2 108.519 117.970 109.128 1.00 0.00
ATOM 25HG1 GLU A 2 108.323 117.660 110.155 1.00 0.00
ATOM 26HG2 GLU A 2 109.328 117.336 108.762 1.00 0.00
ATOM 27 CD GLU A 2 109.002 119.432 109.126 1.00 0.00
ATOM 28OE1 GLU A 2 109.449 119.916 108.058 1.00 0.00
ATOM 29OE2 GLU A 2 109.026 120.057 110.206 1.00 0.00
ATOM 30 C GLU A 2 108.446 116.757 106.163 1.00 0.00
ATOM 31 O GLU A 2 109.650 117.015 106.154 1.00 0.00
Мне нужночтобы получить файл результатов (result.pdb):
ATOM 1 N MET A 1 105.382 119.360 102.631 1.00 11.25
ATOM 2 CA MET A 1 105.155 118.751 103.942 1.00 11.25
ATOM 3 HA MET A 1 104.645 119.496 104.551 1.00 11.25
ATOM 4 CB MET A 1 104.212 117.542 103.804 1.00 11.25
ATOM 5HB1 MET A 1 104.120 117.057 104.775 1.00 11.25
ATOM 6HB2 MET A 1 104.631 116.826 103.095 1.00 11.25
ATOM 7 CG MET A 1 102.801 117.937 103.353 1.00 11.25
ATOM 8HG1 MET A 1 102.862 118.327 102.336 1.00 11.25
ATOM 9HG2 MET A 1 102.436 118.736 103.999 1.00 11.25
ATOM 10 SD MET A 1 101.579 116.590 103.371 1.00 11.25
ATOM 11 CE MET A 1 101.404 116.275 105.156 1.00 11.25
ATOM 12HE1 MET A 1 100.603 115.555 105.325 1.00 11.25
ATOM 13HE2 MET A 1 102.327 115.865 105.565 1.00 11.25
ATOM 14HE3 MET A 1 101.158 117.201 105.676 1.00 11.25
ATOM 15 C MET A 1 106.423 118.387 104.697 1.00 11.25
ATOM 16 O MET A 1 107.511 118.334 104.134 1.00 11.25
ATOM 17 N GLU A 2 106.296 118.095 105.999 1.00 16.49
ATOM 18 H GLU A 2 105.398 118.148 106.454 1.00 16.49
ATOM 19 CA GLU A 2 107.495 117.802 106.786 1.00 16.49
ATOM 20 HA GLU A 2 108.068 118.718 106.664 1.00 16.49
ATOM 21 CB GLU A 2 107.242 117.714 108.295 1.00 16.49
ATOM 22HB1 GLU A 2 106.839 116.732 108.520 1.00 16.49
ATOM 23HB2 GLU A 2 106.494 118.455 108.581 1.00 16.49
ATOM 24 CG GLU A 2 108.519 117.970 109.128 1.00 16.49
ATOM 25HG1 GLU A 2 108.323 117.660 110.155 1.00 16.49
ATOM 26HG2 GLU A 2 109.328 117.336 108.762 1.00 16.49
ATOM 27 CD GLU A 2 109.002 119.432 109.126 1.00 16.49
ATOM 28OE1 GLU A 2 109.449 119.916 108.058 1.00 16.49
ATOM 29OE2 GLU A 2 109.026 120.057 110.206 1.00 16.49
ATOM 30 C GLU A 2 108.446 116.757 106.163 1.00 16.49
ATOM 31 O GLU A 2 109.650 117.015 106.154 1.00 16.49
, в котором оценки аминокислоты применяются ко всем ее атомам в последнем столбце.
Стоит отметитьчто файлы pdb имеют свой собственный формат, который необходимо поддерживать.Действительно, dest.pdb был создан строкой кода:
var=0.00
awk '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n",
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $var}' < a.pdb >> dest.pdb
В моих неудачных попытках я пытался сопоставить целые числа в column1 source.csv с 6-м полем dest.pdb.Если это так, замените 11-е поле файла pdb значениями во втором столбце и в той же строке source.csv.Поскольку это блок кода гораздо большего скрипта bash, я попытался сделать это, используя только инструменты bash.В частности, я много пробовал с awk, что-то вроде:
while read -r n score; do
awk -v x=$n -v y=$score '{if ($6 == $x) printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $y}' dest.pdb
done < source.csv >> results.pdb
Я застрял на этом этапе и был бы признателен за любую помощь, чтобы двигаться дальше.Спасибо.
ОБНОВЛЕНИЕ. Я решил вышеуказанные проблемы с помощью следующей стратегии: (1) Удалите ненужные атомы водорода, которые запутались, потому что они имеют трехзначные имена атомов.Я сделал с помощью специальной небольшой программы, которая называется Reduce [http://kinemage.biochem.duke.edu/software/reduce.php][1] (2), удалите строки заголовков, вставленные в Reduce:
awk '$1 ~ /^ATOM/' A_temp.pdb >> A.pdb
(3) используйте read как парсер в bash:
while read -r atom anum aname resname chain resnum x y z q b ; do
while read -r n evol ; do
if [[ ${resnum} == ${n} ]]
then
echo "$atom $anum $aname $resname $chain $resnum $x $y $z $q $evol" >> out.pdb
fi
done < source.tsv
done < A.pdb
(4) Отформатируйте файл A.pdf с помощью awk:
awk '{printf "%4s%7.0f%5s%4s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%6.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11}' < out.pdb >> Aform.pdb
echo 'TER' >> Aform.pdb