集合演算を手軽にやりたかった。
以下のようなxs.jsonとys.jsonに対する集合演算をやってみたい。
$ echo '[1,2,3,4,5]' > xs.json $ echo '[2,4,6,8,10]' > ys.json
意外とコマンドライン引数に渡して、それに --slurp をつけてリストとして扱うというのが便利。
$ jqfpy --slurp 'L = get(); do_something(L[0], L[1])' <file1> <file2>
これはgetでも大丈夫。
$ jqfpy --slurp 'do_something(get("0"), get("1"))' <file1> <file2>
やってみた結果
intercection
# x * y
$ jqfpy --slurp 'list(set(get("0")).intersection(get("1")))' xs.json ys.json
[
2,
4
]
union
# x + y
jqfpy --slurp 'list(set(get("0")).union(get("1")))' xs.json ys.json
[
1,
2,
3,
4,
5,
6,
8,
10
]
difference
# x - y
jqfpy --slurp 'list(set(get("0")).difference(get("1")))' xs.json ys.json
[
1,
3,
5
]
# y - x
jqfpy --slurp 'list(set(get("0")).difference(get("1")))' ys.json xs.json
[
6,
8,
10
]
jqでは
たぶんjqでも出来るでしょと思って調べたら結構辛そうだった。pythonに丸投げできてjqfpy作ってよかったと思った。