请求编写高效Bash脚本:批量生成序列数喂给可执行文件
优化Bash脚本批量处理数字输入的效率问题
我完全懂你现在的困扰——逐个调用bu.exe实在太浪费时间了,毕竟每次启动进程都有额外开销,90000次启动的累积成本肯定很高。下面给你一套优化方案,直接批量传4500个数字给程序,把进程启动次数从90000次降到20次(90000/4500),效率会提升一大截:
方案一:批量传递命令行参数
如果bu.exe支持一次性接收多个数字作为命令行参数(从你原来的单参数调用来看,大概率是支持的),可以用这个脚本:
#!/bin/bash start=1 batch_size=4500 max_total=90000 while [ $start -le $max_total ]; do # 计算当前批次的结束数字 end=$((start + batch_size - 1)) # 处理最后一批不足4500个的情况,避免超出最大值 if [ $end -gt $max_total ]; then end=$max_total fi # 生成连续数字序列,一次性传给bu.exe C:/Python27/Scripts/bu.exe $(seq $start $end) # 更新起始数字,进入下一批 start=$((end + 1)) done
关键说明:
- 我们用
seq $start $end生成从起始到结束的连续数字,通过命令替换$(...)把这些数字直接作为参数传给程序,每一批只启动一次bu.exe。 - 特意处理了最后一批的边界情况:如果剩下的数字不足4500个,就把结束数字设为90000,保证不会超出总数限制。
方案二:通过标准输入传递(更稳妥)
如果担心命令行参数过多导致长度超限(虽然4500个数字大概率不会触发),或者bu.exe支持从标准输入读取每行一个数字,推荐用管道版本:
#!/bin/bash start=1 batch_size=4500 max_total=90000 while [ $start -le $max_total ]; do end=$((start + batch_size - 1)) if [ $end -gt $max_total ]; then end=$max_total fi # 生成数字序列,通过管道传给bu.exe的标准输入 seq $start $end | C:/Python27/Scripts/bu.exe start=$((end + 1)) done
关键说明:
- 这个版本用
seq生成数字后,通过管道|把内容直接传给bu.exe的标准输入,不需要把所有数字都塞进命令行参数里,兼容性更好。 - 你只需要确认
bu.exe是否支持从标准输入读取数据——如果原来的单参数是处理单个数字,那可能需要稍微调整程序逻辑,但如果程序本身就支持批量读取,这个版本会更高效。
内容的提问来源于stack exchange,提问作者Abhinandan Ramshetty
相关产品推荐
相关产品推荐

