Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从bashshell脚本中的文件计算每行的中间值_Linux_Bash_Shell - Fatal编程技术网

Linux 如何从bashshell脚本中的文件计算每行的中间值

Linux 如何从bashshell脚本中的文件计算每行的中间值,linux,bash,shell,Linux,Bash,Shell,我试图从bashshell脚本中的一个文件中计算每一行的中间值。我相信有一种方法可以通过使用cut、sort、head和tail的流水线命令来实现这一点,但我不知道如何将这个过程集成到我现有的代码中。我想在计算平均值的同一点上计算中值。最好的方法是什么 while read i do sum=0 count=0 mean=0 median=0 for num in $i do sum=$(($sum + $num))

我试图从bashshell脚本中的一个文件中计算每一行的中间值。我相信有一种方法可以通过使用cut、sort、head和tail的流水线命令来实现这一点,但我不知道如何将这个过程集成到我现有的代码中。我想在计算平均值的同一点上计算中值。最好的方法是什么

while read i
do
    sum=0
    count=0
    mean=0
    median=0
    for num in $i
    do
        sum=$(($sum + $num))
        count=`expr $count + 1`
        mean=`expr $sum / $count`
        #Need to calculate the median
    done
    echo "Sum: $sum Mean: $mean"
done < $2
当我读的时候
做
总和=0
计数=0
平均值=0
中位数=0
对于num,单位为$i
做
总和=$($sum+$num))
count=`expr$count+1`
平均值=`expr$sum/$count`
#需要计算中位数吗
完成
回声“总和:$总和平均值:$Mean”
完成<$2

awk
救援

awk '{sum=0; 
      n=split($0,a); 
      for(i=1;i<=n;i++) sum+=a[i]; 
      asort(a); 
      median=n%2?a[n/2+1]:(a[n/2]+a[n/2+1])/2; 
      print sum, sum/n, median}' file
awk'{sum=0;
n=拆分($0,a);

对于(i=1;i假设行的长度可变:

  • 使用
    bash
    和:


  • “最好的方法是什么?”-可能不是在shell脚本中:-)尝试在此处搜索
    [awk]average
    。我看到600+Q/As。祝你好运。注意:awk中的asort仅在awk的gnu版本中可用。
    while read x
    do    tr -s '\t' '\n' <<< "$x" | \
          datamash  median 1
    done < file
    
    while read x
    do    tr -s '\t' '\n' <<< "$x" | \
          numaverage -M
    done < file