忘れないようにメモっとく

機械学習とかプログラミングとか。

awkで列方向に集計する。

合計、平均、分散、標準偏差

列方向の集計やりづらいなって思ってたけど、for (i=1;i<=NF;i++)使って楽チン。

集計するファイル↓↓

hoge.txt

840 394 783 798
911 197 335 768
277 553 477 628
364 513 952 916

awkファイル↓↓

sum.awk

BEGIN {
    print "sum", "ave", "var", "std"
}
{
    sum=0;
    for (i=1;i<=NF;i++){
        sum+=$i
    };
    ave=sum/NF;
    varTemp=0;
    for (i=1;i<=NF;i++){
        varTemp+=($i-ave)^2
    };
    var=varTemp/NF;
    std=sqrt(var);
    print sum, ave, var, std
}

スクリプトの実行と結果。

awk -f sum.awk hoge.txt

sum ave var std
2815 703.75 32418.2 180.051
2211 552.75 87162.2 295.232
1935 483.75 17098.7 130.762
2745 686.25 64317.2 253.608

awkで重複行を高速削除する。

awkで重複行を高速削除する。

行の重複削除で調べるとよく出てくるのが、sort & uniqを使ったコマンド。 ソートはファイルが大きくなると、実行にかなり時間がかかってしまいますね。

ソートせずに高速実行できるのが、次のawkコマンド。

awk '!colname[$1]++{print $1}'

こういうファイルがあって、一列目の名前を取得したいとき、!colname[$1]は、データをキーにした連想配列で、インクリメントされる。

ボブ りんご          | colname["ボブ"] → 0 {print $1}
マイケル まんが      | colname["マイケル"] → 0 {print $1}
マイケル まんが       | colname["マイケル"] → 1
サブロー PC         | colname["サブロー"] → 0 {print $1}
サブロー キーボード   | colname["サブロー"] → 1
ステファン PC       | colname["ステファン"] → 0 {print $1}
サブロー まんが       | colname["サブロー"] → 2
ステファン まんが     | colname["ステファン"] → 1

条件として!をつけているので、二回目以降はFalseとなって、そのデータが最初に現れた行だけを出力するというわけ。ソートは要らないね。

対象の列番号を変えたいときは、上のコマンドの$1を$2とか$3とかにすればおk。

Evernoteをもっとカッコよく使うためのChrome拡張

Markdownを使おう

ad

みんな大好きEvernote。 ちょっとしたノート代わりに書き込んだり、Todoメモや備忘録としても使えて、何よりクラウドで共有できるのが便利ですよね。 自分も思いついたことは何でもEvernoteに書き溜めているのですが、文字の大きさとか文の構造とかをカッコよく、サクサク書けたらなと考えていました。

いろいろ探してみたところ、Markdown記法で書けるようになる拡張機能が良さげなので、Chromeに追加してみました。

ちなみに、Markdown記法ってなに?っていう人。Markdown記法の特徴は、

  • 文構造が直感的で覚えやすい。
  • htmlタグより簡単に書ける。
  • 表とか数式も表示できる。
  • プラットホームを選ばない。

という感じでしょうか。 とっても簡単です。くわしくはこのあたりを。Markdown記法 チートシート

Markdown Here

追加したアプリは、 Markdown Here というChrome拡張機能です。 safarifirefoxでも動作するみたいです。

アプリを追加したら、EvernoteにMarkdownで書き込んで....

f:id:Akiniwa:20140324211246p:plain

ショートカットキーで「Ctrl」+「alt」+「m」と打つと、一発でMarkdownに変換されます。かっちょいー!!

f:id:Akiniwa:20140324211424p:plain

ちなみにHTMLタグも変換してくれるので、HTMLに慣れてて、Markdown覚えるのめんどくさいという方にもオススメです。