在命令行将数字序列解析为20的范围

时间:2015-07-13 16:06:30

标签: regex bash shell

对于任何连续的整数范围,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

2 个答案:

答案 0 :(得分:2)

这应该做你想要的。

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也期望)。

答案 1 :(得分:0)

尝试使用此解决方案,可能可以帮助您:

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