我需要修改许多.pdb文件才能工作,并且需要编写此操作脚本,以免浪费时间每次手动进行。
我有一个具有这种特定格式的文件(这是该文件的摘录,您可以看到完整的文件here):
ATOM 5210 C4 G B 96 10.157 -47.431 -42.832 1.00 43.97 C
ATOM 5211 P G B 97 11.305 -41.644 -44.835 1.00 26.64 P
ATOM 5212 OP1 A B 97 12.654 -41.242 -44.460 1.00 26.64 O
ATOM 5213 OP2 A B 97 10.167 -41.192 -44.014 1.00 26.64 O
ATOM 5214 O5' A B 97 11.079 -41.206 -46.340 1.00 26.64 O
尤其是对于每个文件,我都需要用另一个关键字替换第三列中的单词“ OP1”,但是只有在第一列显示“ ATOM”并且第六列上有特定编号的情况下。
我试图用sed编写脚本,但没有得到任何令人满意的结果。
希望任何人都可以帮助
谢谢
答案 0 :(得分:0)
一种简单的开始方式:
改进:
awk '{if ($1=="ATOM" && $6=="410" && $3=="OP2")sub($3,"XXX"); print }'
1X8W.pdb
答案 1 :(得分:0)
尝试此脚本
while read p; do
value1=`echo $p | cut -d' ' -f1`
value2=`echo $p | cut -d' ' -f3`
value3=`echo $p | cut -d' ' -f6`
if [ "$value1" == "ATOM" ] && [ $value3 == 97 ]; then
if [ "$value2" == "OP1" ]; then
echo $p | awk '{gsub("OP1", "newtext", $0); print}'
fi
fi
done < 1X8W.pdb
用要替换为OP1的文本更改newtext
。另外,如果还要检查其他任何数字,请将$ value3比较数字从97更改为其他任何数字。
答案 2 :(得分:0)
类似的声音可能就是您想要做的:
awk '($1=="ATOM") && ($6==97) { sub(/^OP1$/,"other",$3); print }' file
但是在您的问题中没有更多细节,我们只是猜测而无法测试。