Portanto, tenho zero a nenhuma experiência em programação / codificação, embora esteja tentando evitar carregar, editar e salvar manualmente 1600 arquivos usando o AutoDock Tools.
Eu tenho 1600 arquivos PDB que eu preciso converter para o arquivo PDBQT para o encaixe autodockVina. Isso levaria um mês usando a GUI do ADT para que eu fizesse isso usando o awk. Sim, pensei em usar o openBabel para fazer isso, já que os arquivos PDB que tenho são de formato não padrão, não funciona.
Eu manejo para percorrer vários arquivos, lendo o PDB e reproduzindo os arquivos PDBQT usando um buttload de ifs aninhados. Eu agora não é bonita, em qualquer lugar, mas ainda é melhor do que a alternativa.
Tudo parece estar funcionando, exceto por três coisas
1) Eu tenho que adicionar "TER" como a última entrada de linha em todos os arquivos. Eu posso obtê-lo no último arquivo ou em cada arquivo, mas o último arquivo .... Eu não consigo descobrir onde colocar o "print" TER "> out1"
2) Eu estou supondo que eu possa precisar fechar a saída em algum momento para evitar a falta de memória, então talvez eu precise colocar um close (out1) em algum lugar.
3) Eu tenho um computador de "contagem sueca" que significa isso. e significa coisas diferentes. Desde que eu não consegui encontrar uma maneira de usar o gsub para converter "para trás" sem salvar tudo em um arquivo, abrindo esse arquivo, convertendo de volta e fechando, estou rodando o script como
LC_NUMERIC="us_US.UTF-8" ./awkFile.awk input.file
Existe alguma maneira de colocar isso no script em vez de no prompt?
Levou-me várias horas para chegar a este ponto e agora desisti :-) Qualquer ajuda é apreciada, é isso que tenho:
#!/usr/bin/awk -f
BEGIN { }
FNR==1 && NR!=1 { var=x=""; } # works though skips the last file
FNR==1 { out1="scriptTest_"FILENAME".pdbqt"; print "REMARK 4 XXXX COMPLIES WITH FORMAT V. 2.0" > out1; next; }
{ endFunction(); print "TER" > out1;}
END { }
function endFunction()
{
var=""
if ( $3 ~ "C" || $3 ~ "N" || $3 ~ "O" || /H5 MAA/ || /H16 DP/ || /H15 DP/ ) {
# look for particular MAA atoms and assign the same values as in "FF"
if ( /C MAA X/ ) { var =" 0.170 C " }
...
if ( /H5 MAA X/ ) { var =" 0.167 HD" }
# look for particular XLI atoms and assign the same values as in "FF"
if ( /C XLI X/ || /C7 XLI X/ ) { var =" 0.054 C " }
...
if ( /C3 XLI X/ || /C4 XLI X/ ) { var =" 0.206 C " }
#
x+=1
printf "%-s %6d %s %-3s %3s %s %3d %11.3f %7.3f %7.3f %5.2f %5.2f %s\n", $1, x, "", $3, $4, $5, $6, $7, $8, $9, $10, $11, var > out1;
}
# print "TER" > out1; needs to be added after the last line in each file
# I suppose I also need to solve the open-file issue.
# close(out1); return
# And the decimal point thing...
}
O ... está substituindo algo como 120 linhas de if's :-P