数値の合計を取るのにJSONとみなせる

以下のような数値が行毎に出力されたファイルがあり。この合計を出す時に

00data.txt

1
2
3
4
5
6
7
8
9
10

(複数の列がある中でcutなどで合計を求めたい列だけを取り出してからのsumの場合もある)

以前までは真面目にpythonワンライナーを書いていた。他の方法を調べる気も起きなかったので。ちょっと長いし面倒。

$ 00data.txt | python -c 'import sys; print(sum(float(line.strip()) for line in sys.stdin))'
55

JSON

数値もJSONなのでJSONとして扱えば楽だった。jqfpyで楽に書ける。 --slurp を付けてあげればlistになるので sum() が使える。

$ cat 00data.txt | jqfpy --slurp 'sum(get())'
55

もちろん、jqにもそのようなオペレーターはあるはずで。調べてみたらaddがあった。

$ cat 00data.txt | jq --slurp 'add'
55