標準出力で受け取った複数の数字の合計値を出すワンライナー

スポンサード リンク

CSVのテキストデータ、ここに含まれる数値の合計だけ知りたいんだけど、Excel立ち上げるのめんどいなあってこと、ありませんか?

そんなわたしのために、ワンライナーを作りました。

$ cat hoge.txt | xargs | perl -pe "s/ /+/g" | bc

使い方は、こんな感じ。

$ cat hoge.txt
14
214
313
$ cat hoge.txt | xargs | perl -pe "s/ /+/g" | bc
541

14,214,313 みたいな数字を標準出力から受け取ります。 それをパイプでつなぎいくつかのコマンドを介して、最終的には受け取ったすべての数値の合計値を返します。

解説しよう!

cat hoge.txt

ここは数値を受け取る部分。数値だけが出力されるようにご調整ください。

「大量のログデータの中から該当箇所をgrepして抜き出して、perl -peで数値前後の箇所削除する」とか「CSVの3項目目の数値だけ cut -d, -f3 して取り出す」とかいろいろ出来ると思います。

xargs

これがないと、数値がぶつ切りに改行されて出力されるため、まとめてbcに送る事ができません。

xargsを使うと受け取った数値が、" "(半角スペース)区切りの1行の引数として送ることが出来るようになります。

つまり、
"14
214
313"
を、"14 214 313"という形で受け取れます。

perl -pe "s/ /+/g"

ここでperlで半角スペースをプラス記号に置換しています。 つまり、"14 214 313”が、"14+214+313"になるわけです。

bc

最後に bc が"14+214+313"を計算し、出力してくれて終わり!

以上、Mac OS X Lion の Terminal で動作確認してます。

スポンサード リンク