You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中使用增量变量拼接PDB文件的问题求助

修正你的PDB文件拼接Bash脚本

我来帮你解决这个脚本的问题!你的核心需求是把单个A文件分别和100个编号的B文件拼接成新文件,但原脚本里的变量引用和循环逻辑有几个小问题,我帮你修正并优化一下:

原脚本的问题点

  • 变量引用错误:你用了 [$COUNTER] 来调用变量,但Bash里变量直接用 $COUNTER 即可,方括号会被当成文件名的一部分,导致脚本找不到正确的T0950-B_1.pdb这类文件,反而会去找T0950-B_[1].pdb(带方括号的文件名)。
  • 循环起始值不对:你的B文件是从_1到_100,但脚本里COUNTER从0开始,会尝试找不存在的T0950-B_0.pdb,应该从1开始循环到100。
  • 多余的./cat:cat是Shell内置命令,直接调用cat就行,不需要加./(除非你当前目录有自己编译的cat程序,这一般没必要)。

修正后的基础版脚本

这个版本解决了所有问题,逻辑清晰:

#!/bin/bash
# concatenate pdb A file to 100 pdb B files
COUNTER=1
while [ $COUNTER -le 100 ]; do
    cat T0950-A.pdb T0950-B_$COUNTER.pdb > Frodock-T0950_$COUNTER.pdb
    ((COUNTER++))
done

更简洁的For循环版本

Bash的For循环可以直接生成数字序列,不用手动管理计数器,写起来更简洁:

#!/bin/bash
# concatenate pdb A file to 100 pdb B files
for i in {1..100}; do
    cat T0950-A.pdb T0950-B_$i.pdb > Frodock-T0950_$i.pdb
done

更健壮的增强版(带文件存在检查)

如果担心某些B文件可能缺失,这个版本会跳过不存在的文件并给出提示,避免报错中断:

#!/bin/bash
# concatenate pdb A file to 100 pdb B files
for i in {1..100}; do
    b_file="T0950-B_$i.pdb"
    # 检查B文件是否存在
    if [ -f "$b_file" ]; then
        cat T0950-A.pdb "$b_file" > "Frodock-T0950_$i.pdb"
        echo "Successfully created: Frodock-T0950_$i.pdb"
    else
        echo "Warning: $b_file not found, skipping this file..."
    fi
done

使用方法很简单:把脚本保存为concat_pdb.sh,然后执行chmod +x concat_pdb.sh赋予执行权限,再运行./concat_pdb.sh即可。

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:16