我需要一个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