编写BASH/ZSH脚本:批量将分子坐标写入模板生成ORCA计算输入文件
批量生成分子计算输入文件的脚本修复方案
需求回顾
- 处理命名格式为
<prefix>_DH###.xyz的分子坐标文件 - 跳过每个xyz文件的前两行(原子数、注释行),提取笛卡尔坐标
- 将模板文件中的
$coords占位符替换为提取的坐标 - 生成命名为
<prefix>_D###.inp的输入文件,并存入对应编号的D###目录
完整修复脚本
#!/bin/zsh template="$2" # 检查模板文件是否存在 if [[ ! -f "$template" ]]; then echo "错误:模板文件 $template 不存在" exit 1 fi # 遍历所有符合命名规则的xyz文件 for xyz_file in *_DH[0-9][0-9][0-9].xyz; do # 跳过glob匹配失败时的空结果 [[ -f "$xyz_file" ]] || continue # 从文件名提取前缀和三位编号 prefix="${xyz_file%_DH*.xyz}" num="${xyz_file#*_DH}" num="${num%.xyz}" # 定义输出路径 output_dir="D${num}" output_file="${output_dir}/${prefix}_D${num}.inp" # 提取坐标(跳过前两行) coords=$(sed '1,2d' "$xyz_file") # 替换模板占位符并生成输入文件 sed "s/\$coords/$coords/g" "$template" > "$output_file" echo "已生成:$output_file" done
关键修复说明
- 不修改原文件:通过
sed '1,2d'直接提取坐标到变量,避免破坏原始xyz文件 - 自动解析文件名:用参数扩展从xyz文件名中拆分前缀和编号,无需手动计数或指定索引
- 精准替换占位符:利用
sed字符串替换功能,将模板中的$coords直接替换为多行坐标 - 容错机制:添加模板文件存在性检查、glob匹配失败跳过逻辑,避免脚本崩溃
内容的提问来源于stack exchange,提问作者isolated matrix
相关产品推荐
相关产品推荐

