用shell脚本计算mediane

时间:2016-04-26 11:49:56

标签: 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打印的第二个循环中计算数字媒体,然后在屏幕上打印此媒体。 所以我最后会有$i媒体。

我知道我应该首先使用./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:例如我输入./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美元价值的中位数并打印一个值

2 个答案:

答案 0 :(得分:2)

您的问题很难理解,但我认为您希望多次运行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程序的所有输出的中位数。如果是这样,首先通过sort输出输出,然后找到awk的中间输出:

for ...
   for ...
      ./sujet ...
   done
done | sort -n | awk '{x[NR]=$0} END{middle=int(NR/2); print x[middle]}'

答案 1 :(得分:0)

你可以反击'反对'操作者:

result="`./sujet1 $1 $2 $i`"

它用于"内联"运行os命令,并将其输出分配给左侧变量