如何提取grep结果指定部分并实现pdb文件坐标替换?
替换PDB文件特定行坐标的Shell脚本方案
如果你需要把目标PDB文件中含特定关键词行的坐标,替换到参考PDB文件对应行的坐标位置,下面是经过验证的完整解决方案:
需求回顾
- 目标文件和参考文件都包含带特定关键词(比如示例中的
OXT ORN)的行 - 坐标固定在每行的第33-54列
- 需要将坐标提取为变量,通过
sed完成替换操作
完整可运行脚本
#!/bin/bash FILE=$1 # 提取目标PDB文件中指定行的坐标(精准截取33-54列) PDBcoords=$(grep -i "OXT ORN" "$FILE.pdb" | cut -c 33-54) echo "Found PDB Coordinates for $FILE: $PDBcoords" # 提取参考PDB文件中指定行的坐标 refcoords=$(grep -i "OXT ORN" pkaSH.pdb | cut -c 33-54) echo "Found Reference Coordinates: $refcoords" # 执行替换:用目标坐标替换参考文件中的对应坐标 sed -i "s/$refcoords/$PDBcoords/" pkaSH.pdb echo "Coordinate replacement completed successfully for $FILE"
关键细节解释
- 坐标提取逻辑:
grep -i "OXT ORN":不区分大小写匹配目标行,确保关键词大小写变化时也能命中cut -c 33-54:按字符位置精准截取坐标区域,完美匹配PDB文件的格式规范- 直接用命令替换
$()赋值变量,自动保留坐标中的空格,无需额外处理
- sed替换注意事项:
- 必须用双引号包裹替换表达式,这样Shell才会解析变量
$refcoords和$PDBcoords的实际值(单引号会把变量名当成字面量) -i参数让sed直接修改文件内容(如果是macOS系统,需要改为sed -i '',避免生成冗余的备份文件)
- 必须用双引号包裹替换表达式,这样Shell才会解析变量
- 使用方式:
运行脚本时传入目标PDB文件名(不带.pdb后缀)即可:./replace_coords.sh my_target_pdb
内容的提问来源于stack exchange,提问作者sweetandtangy
相关产品推荐
相关产品推荐

