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

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 で動作確認してます。

関連記事

前の記事へ

おむつデザがしまじろうからオリンピックがんばれジャパンになった件について、P&Gマーケチームにあえてエールを送りたい

次の記事へ

iPhone Safariで見るTwitterオーバーキャパシティのくじらさんかわゆす