Bash 用shell脚本计算mediane
我有一个循环打印数字的脚本Bash 用shell脚本计算mediane,bash,shell,Bash,Shell,我有一个循环打印数字的脚本 #!/bin/bash for i in `seq 80 $i` do for j in `seq 1 $4` do ./sujet1 $1 $2 $i done done /sujet1$1$2$i是一个C编译的程序,可以打印数字(但我不喜欢在屏幕上打印) 我想计算第二个循环中/sujet1$1$2$I打印的数字中间值,然后在屏幕上打印这个中间值。 因此,我将在最后使用$Imediane 我知道我应该首先使用/suje
#!/bin/bash
for i in `seq 80 $i`
do
for j in `seq 1 $4`
do
./sujet1 $1 $2 $i
done
done
/sujet1$1$2$i
是一个C编译的程序,可以打印数字(但我不喜欢在屏幕上打印)
我想计算第二个循环中/sujet1$1$2$I
打印的数字中间值,然后在屏幕上打印这个中间值。
因此,我将在最后使用$I
mediane
我知道我应该首先使用/sujet1$1$2$I>>mediane.txt
保存值。但我不知道如何在文件中恢复它们,计算mediane,在完成每个循环时擦除它们
编辑:
正如评论中所说,我试过使用awk,但我发现很难理解
#!/bin/bash
for i in `seq 80 $i`
do
for j in `seq 1 $4`
do
awk '{ total += ./sujet1 $1 $2 $i } END { print total/NR }' mediane.txt
done
done
这对我不起作用
编辑2:例如i type./run.sh 30 40 90 3
所以我要
//for($3= 80 )
2,3
3,5
4,4
//for($3= 81 )
4,5
1,3
5,6
...
//for($3=90)
2,4
3,5
5,4
你注意到这里,对于$3中的每一个值,我重复了$4的值。我想计算这些$4值的中位数并打印一个值您可以使用“backticks”运算符:
result="`./sujet1 $1 $2 $i`"
它用于“内联”运行os命令,并将其输出分配给左侧变量您可以使用“backticks”运算符:
result="`./sujet1 $1 $2 $i`"
它用于“内联”运行操作系统命令,并将其输出分配给左侧变量您的问题很难理解,但我认为您需要多次运行
sujet
程序并平均答案
for i in `seq 80 $i`
do
for j in `seq 1 $4`
do
./sujet1 $1 $2 $i
done
done | awk '{total += $0} END{ print total/NR}'
也许您需要sujet
程序所有输出的中值。如果是这样,首先通过管道将输出进行排序
,然后使用awk
找到中间的输出,如下所示:
for ...
for ...
./sujet ...
done
done | sort -n | awk '{x[NR]=$0} END{middle=int(NR/2); print x[middle]}'
您的问题很难理解,但我认为您希望多次运行
sujet
程序,并对答案进行平均
for i in `seq 80 $i`
do
for j in `seq 1 $4`
do
./sujet1 $1 $2 $i
done
done | awk '{total += $0} END{ print total/NR}'
也许您需要sujet
程序所有输出的中值。如果是这样,首先通过管道将输出进行排序
,然后使用awk
找到中间的输出,如下所示:
for ...
for ...
./sujet ...
done
done | sort -n | awk '{x[NR]=$0} END{middle=int(NR/2); print x[middle]}'
我不知道如何在我的情况下应用这个命令你的问题很难理解。请你把一些简单的数字放进去,告诉我它应该做什么好吗?你说mediane的时候听起来像是在说平均数。我不知道如何在我的情况下应用这个命令。你的问题很难理解。请你把一些简单的数字放进去,告诉我它应该做什么好吗?听起来你说的mediane是指平均值。我没有得到任何值。。否则,我想:1)将C程序值保存在一个文件中。2) 将该值读入变量“total”3)执行1和2$4次,然后计算介质,使“total”增加$4(total是一个浮点值)。我认为这是最简单的方法。但我无法正确编码..@infodev抱歉。我还是不能理解你。你写过C程序吗?或者这就是问题所在?C程序只是打印一个浮点数,每个循环都会有一点变化,我只想在每一秒循环结束时计算这些数字的中位数,也许你需要将我的
| sort-n | awk…
向上移动一行,并将其放在包含done
的第一行之后,而不是第二行done
之后,我没有得到任何值。。否则,我想:1)将C程序值保存在一个文件中。2) 将该值读入变量“total”3)执行1和2$4次,然后计算介质,使“total”增加$4(total是一个浮点值)。我认为这是最简单的方法。但我无法正确编码..@infodev抱歉。我还是不能理解你。你写过C程序吗?或者这就是问题所在?C程序只是打印一个浮点数,每个循环都会有一点变化,我只想在每一秒循环结束时计算这些数字的中位数,也许你需要将我的| sort-n | awk…
向上移动一行,并将其放在包含完成的第一行之后,而不是第二行完成的后面