在循环中创建序列号



我需要一个bash脚本,它可以按顺序生成4500个数字并将其作为输入提供给可执行文件,并通过创建下一个4500个数字来重复该过程,然后再次馈送到同一个可执行文件。一旦生成的数字超过 90000,脚本应退出。现在我正在使用:

i=1
while [ "$i" -le 90000 ]; do
    C:/Python27/Scripts/bu.exe "$i"
    i=$(($i+1))
done

一次输入一个数字,是一个耗时的过程。

任何帮助将不胜感激。

谢谢你和问候。

$ for (( i=1; i<12; i+=3 )); do printf '####n'; seq "$i" "$(( i+2 ))"; done
####
1
2
3
####
4
5
6
####
7
8
9
####
10
11
12

上面的数字替换为您的实际值,根据您真正尝试执行的操作,将 seq 输出管道传输到您的命令:

$ for (( i=1; i<12; i+=3 )); do seq "$i" "$(( i+2 ))" | my_command; done

或者使用 seq 输出调用您的命令作为参数:

$ for (( i=1; i<12; i+=3 )); do my_command $(seq "$i" "$(( i+2 ))"); done

我宁愿建议你像下面这样并行执行它。我下面的修改将并行执行 10 个进程,并减少您的执行时间。请记住,并行执行还取决于系统中处理器和内存的数量。

i=1
j=0
while [ "$i" -le 90000 ]; do
C:/Python27/Scripts/bu.exe "$i" &  
# Now you are executing parallel
j=$(($j+1))
#if 10 parallel process has been created just wait to complete them
# and re-start the parallel process again
if [ $j -ge 10 ]; then
   wait
   j=0
fi
i=$(($i+1))
done

我在某处读到运行$(seq)很昂贵(在该讨论的上下文中,与此问题无关(,所以我决定在bu.exe在后台运行时测试运行seq

for (( i=1 ; $((j=i+4499))<=90000 ; i+=4500))  # 1...4500, 4501...9000 etc.
do 
  parms=$(seq -s " " $i $j)                    # set the parameters to var
  wait $pid                                    # wait for the previous bu.exe
  bu.exe "$parms" &                            # execute bu.exe in the bg
  pid=$!                                       # store pid
done

最新更新