用多个关键字检查替换特定行中的单词

时间:2018-10-03 15:46:55

标签: bash file sed

我需要修改许多.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编写脚本,但没有得到任何令人满意的结果。

希望任何人都可以帮助

谢谢

3 个答案:

答案 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

但是在您的问题中没有更多细节,我们只是猜测而无法测试。