2バイト長整数を羅列しただけのバイナリファイルからRMS値を算出するには、
rms=`cat temp.raw |\
od -w2 -t d2 -v -An |\
awk '{m+=$1^2} END{print sqrt(m/NR);}'`echo $rms
だけです。
-w2 は2バイトずつ読み込む、-t d2 は符号付2バイト長整数、 -v は繰り返し省略禁止、-Anはオフセットアドレスの非表示を意味するオプションです。
このあたりのオプションを使いこなせば4バイト長整数や浮動小数点数も計算可能だと思います。またヘッダーやフッターがあってもddコマンドが利用可能です。
当初SCILABを使用しました。SCILABでも配列Xに所望のファイルを読み込んだとすると
sqrt(x'*x/size(x,1))
だけで求めることができます。ですから起動さえしてしまえば結構速いのですが、SCILAB自体の起動に時間がかかってしまうため、繰り返しが多い用途には不向きでした。
また、bcでも累乗や平方根は計算できるので、オクタルダンプしてforループでbcを回してみました。しかし、これもループに結構時間がかかったため断念しました。
その点、awkだと速いし、行数は少ないし、コンパイルしないで済むし、良いことづくめです。