ここの「AWKでなんか色々統計処理をやってみた」というsectionにワンライナーでコマンドがまとめられてる
以前から使ってる別のワンライナーコマンドをまとめたページも貼ろうと思ったけど、
記事が別の場所に移動して怪しかったのでやめた
分散と標準偏差が便利
ダブルコーテーションじゃなくてバッククオートじゃないといけなかった
# 平均
awk '{sum+=$1}END{print sum/NR}' hoge.txt
あとで気づいたけど、これ"あんちべ"さんだ・・・awk '{sum+=$1}END{print sum/NR}' hoge.txt
# 分散
awk '{d[NR]=$1;avg+=$1}END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print s/(NR-1)}' hoge.txt
# 標準偏差
awk '{d[NR]=$1;avg+=$1}END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print sqrt(s/(NR-1))}' hoge.txt
別の記事に艦これの加賀さんが出て来ていたのでメモメモ
■ 面白い記事 : 自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる
# シャッフルを用いた重複なしランダムサンプリング
awk 'BEGIN{srand()} {line[NR] = $0} END{for(;i<100000;i++){r=1+int(rand()*NR);s=1+int(rand()*NR);tmp=line[r];line[r]=line[s];line[s]=tmp};for(t in line)print line[t]}' hoge.txt | awk "NR <= 100"
これで100000回並べ替えを行って、そこから先頭の100個のデータを抽出できるawk 'BEGIN{srand()} {line[NR] = $0} END{for(;i<100000;i++){r=1+int(rand()*NR);s=1+int(rand()*NR);tmp=line[r];line[r]=line[s];line[s]=tmp};for(t in line)print line[t]}' hoge.txt | awk "NR <= 100"
元のソースコードは上記と同じリンク
srandは現在の時刻から初期シードを生成して、乱数生成を行うので
1秒以内に同じコードを実行するとまったく同じ結果になってしまう
この処理を何度も行うときはsleep 2とかを間に挟んだ方が良い
ランキング参加中です
↓クリックしていただけると嬉しいです〜