解析数值序列为20个的范围在命令行(Parse numeric sequence into rang

2019-10-23 20:22发布

对于整数的任何顺序范围, n1..n2我如何可以使用命令行工具来把它解析为长度的范围<= n

作为一个具体的例子,我有一个命名的文件夹目录1253..2050 。 每个文件夹都有一个称为脚本job.sh ,我可以在20个职位(因为每个节点有20个内核)批次提交。 因此,我想生成以下命令:

样品输入:

echo {1253..1301}

对于特定的情况下,我可以生成使用任一整数的该序列/bin/lscat runs.txt

输出示例:

qsub -t 1253-1272 array.pbs
qsub -t 1273-1292 array.pbs
qsub -t 1293-1301 array.pbs

Answer 1:

这应该做你想要什么。

count=20
off=0
dirs=(*)

while (( (off + count) < ${#dirs[@]} )); do
    qsub -t ${dirs[off]}-${dirs[off+count]} array.pbs
    ((off+=count + 1))
done
if [ $off -ne ${#dirs[@]} ]; then
    qsub -t ${dirs[off]}-${dirs[@]: -1} array.pbs
fi

这最后if可能不是你的情况需要而这个循环排序的假定范围将是完整的(我假设qsub预计,太)。



Answer 2:

尝试这种解决方案,可能是能够帮助你:

echo {1253..1301} | tr ' ' "\n" | awk '{print "gksub -t " $1 "/job.sh"}'


文章来源: Parse numeric sequence into ranges of 20 at the command line
标签: regex bash shell