0

これをbashターミナルで使用して、巨大なファイルの平均を取得しました。

awk 'BEGIN{s=0;}{s=s+$2;}END{print s/NR;}' file

出来た。好奇心から(つまり、将来の知識のために)、シェルで計算する一般的な方法について知りたいと思います。R、バッシュ、パイソン...? 速くて汚れていますが、それでも堅牢で高速です。

4

3 に答える 3

2

一般に、expr単純な算術演算に使用します。

$ expr 3 + 4
7
$ expr 3 '*' 4
12

dcまたはも使用できますbc

$ dc -e '3 4 + p'
7

あなたのawkスクリプトメソッドにも特に問題はありません。私はdcこれを行うには十分ではありませんが、計算を行うために使用できる可能性があります。

$ export DC_COMMANDS="dc script to operate on numbers from file"
$ dc -e "$(cut -d' ' -f2 < file) ${DC_COMMANDS}"

これにより、すべての数値が に渡されdc、コマンドが実行されます。このコマンドは、数値の合計と除算の命令を実行するために使用できます。

も参照してくださいdc(1)

于 2012-10-16T12:35:12.840 に答える
2

確かにベンチマークする必要がありますが、私の経験では awk (使用したように) は通常、この種のことのスイートスポットです。ネイティブ シェルよりも高速で、perl などのより洗練されたものよりも起動時のオーバーヘッドが少なくなります。そうは言っても、私は純粋なシェルでコーディングするのが好きな傾向があります。

#!/bin/bash
exec <file
declare -i sum=0 count=0
while read a b c; do
  (( count++ ))
  sum+="${b}"
done
echo $(( sum / count ))

もちろん、整数の結果を探している場合にのみ機能しますが、必要に応じて、いつでも遊んで追加の10進数を取得できます。

echo $(( sum / count )).$(( ((sum * 100) / count) % 100 ))
于 2012-10-16T12:36:34.233 に答える
1

あなたの質問はテキストファイルの処理に関するものではなく、もっと「一般的に、シェルで計算を行うための最良の方法は何ですか?」だと思います。私が間違っている場合は、私に知らせてください、私は私の答えを消します。

最善の方法はありませんが、単純で柔軟なアプローチは、標準のシェルコマンドであるbcを使用することです。コマンドbcは、任意精度の演算をサポートしています。キーワードを使用して、必要な精度を指定する必要がありますscale。例えば:

echo "scale=10; 1/3" | bc

.3333333333を印刷します

echo "scale=2; 1/3" | bc

.33を印刷します

スクリプトでは、このように使用します

x=10
result=$(echo "scale=10; $x /5 "|bc)
echo $result

man bcGNUページの 詳細については、 http ://www.gnu.org/software/bc/を参照してください。

于 2012-10-16T12:43:26.877 に答える