2017-04-22 14 views
0

bashシェルスクリプトのファイルから各行の中央値を計算しようとしています。パイプ、カット、ソート、ヘッド、テールのコマンドを使用してこれを達成する方法があると信じていますが、既存のコードにこのプロセスを統合する方法を理解できません。私は平均を計算しているのと同じポイントで中央値を計算したいと思います。これを行う最善の方法は何ですか?bashシェルスクリプトのファイルから各行の中央値を計算する方法

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

ここで '[awk] average'を検索してみてください。私は600 + Q/Asを見る。がんばろう。 – shellter

答えて

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 

bashは、このタスクには適切なツールではありません。行を想定し

2

は可変長である:

  1. bashdatamashの使用:

    while read x 
    do tr -s '\t' '\n' <<< "$x" | \ 
         datamash median 1 
    done < file 
    
  2. numaverageの使用:

    while read x 
    do tr -s '\t' '\n' <<< "$x" | \ 
         numaverage -M 
    done < file 
    
関連する問題