我对Bash脚本编写起来相对较新,最后想到了一些可以很好地介绍它的东西。我有一系列排序程序,我试图计时。像大多数测试一样,获得大样本量是件好事,但要始终如一地做到这一点很难。我认为使用Bash脚本自动化这个过程是一个很好的方法,但我不会做太多的Bash。
排序程序是用C ++编写的,并输出它们对从文件读入的10000个整数值的数组进行排序所需的时间。我使用几种不同的方法对数组进行排序,包括冒泡排序,快速排序和并行化(Boost线程)快速排序。在执行结束时,时间输出到控制台并停止执行。我想在Bash脚本中做的是......
for 1 to 100:
./quicksortpar --this is the command to start the program
take time reading from output, place in collection
--when that's done
for 1 to 100 in the collection:
add each item in the collection to a running total
--when that's done
echo running total/ 100
我如何在Bash中完成此操作?有可能吗?
编辑:
这是我在Tony D的指导下提供的当前Zsh脚本:
答案 0 :(得分:2)
您可以在bash中使用gnu bc进行浮点运算。所以做类似下面的事情
#!/bin/bash
declare -a coll
for _ in {1..100}; do
coll+=("$(./quicksortpar)")
done
sum=0
for i in ${coll[@]}; do
sum="$(echo "$sum + $i" | bc -l)"
done
echo "$sum / ${#coll[@]}" | bc -l
注意,根据Jonathan Leffler's suggestion
,时间可以相加一次而不是循环sum=$( { printf "%d+" "${coll[@]}"; echo 0; } | bc -l)
答案 1 :(得分:1)
(更新:在zsh中意外地解决了这个问题 - 没有在bash中工作)
TOTAL=0
for ((i=1; i<=100; i++))
do
let TOTAL+=$(./quicksortpar)
done
let AVG=TOTAL/10
echo $AVG