连接文件时,在bash脚本中使用增量变量

时间:2018-05-14 10:25:35

标签: bash concatenation

我有100个.pdb文件,我需要连接到另一个.pdb文件。我正在使用bash脚本和cat命令,但无法正确编写增量变量!有一个T0950-A.pdb文件和100个T0950-B_1.pdb文件使用文件名中的最后一个数字递增编号为100。这是我的剧本:

#!/bin/bash

#concatenate pdb A file to 100 pdb B files

COUNTER=0
while [ $COUNTER -lt 101 ]; do
    ./cat T0950-A.pdb T0950-B_[$COUNTER].pdb > Frodock-T0950_[$COUNTER].pdb
    let COUNTER=COUNTER+1
done

非常感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

for pdbb in T0950-B_*.pdb; do
    cat T0950-A.pdb "$pdbb" >"Frodock-T0950_${pdbb#*_}"
done

${pdbb#*_}参数替换会将字符串T0950-B_55.pdb转换为55.pdb(删除所有内容,包括第一个_字符。)

这依赖于现有的PDB B文件,不会尝试迭代整数。

如果您想遍历前100个PDB B文件,那么您可以使用

for pdbb in T0950-B_{1..100}.pdb; do
    cat T0950-A.pdb "$pdbb" >"Frodock-T0950_${pdbb#*_}"
done

for (( i = 1; i <= 100; ++i )); do
    pdbb="T0950-B_$i.pdb"
    cat T0950-A.pdb "$pdbb" >"Frodock-T0950_${pdbb#*_}"
done

但这两种变体并不能保证迭代的文件实际存在。

回复评论(也有名称如H0957-B.1.pdb的文件)。

是的,以上代码无法获取这些内容。相反,你会做类似

的事情
for pdbb in H0957-B.*.pdb; do
    cat H0957-A.pdb "$pdbb" >"Somename-H0957_${pdbb#*.}"
done