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…
向上移动一行,并将其放在包含
完成的第一行之后,而不是第二行
完成的后面