グループ集約ユーティリティ(例:SQL GROUP BY)?

グループ集約ユーティリティ(例:SQL GROUP BY)?

Unixには、ストリームで関係代数に似た操作を実行するためのいくつかのユーティリティがあります(grep、、、、、に追加)。すぐに利用可能な(またはほとんどのLinuxディストリビューションにインストール可能な)グループ集約ユーティリティはありますか?joincutawk

目的は、次のように、ある列にいくつかのキーがあり、他の列にいくつかの値を持つファイルを取得することです。

foo.txt   u1    394082
bar.txt   u2    3948
frob.c    u1    29322

そして、ある列には一意の値があり、もう一方の列にはいくつかの値のセットを含むファイルが出力されます。たとえば、3番目の列と2番目の列の合計は次のようになります。

$ aggregate --sum=3 --group-by=2 <data
u1 423404
u2 3948

そのようなユーティリティが存在しますか(Perl、Awkなど、1行は含まれていません)、またはまだ作成されていませんか?

ベストアンサー1

他のStackOverflowの質問でこの答えを見つけたようですが、「q」がこの目的に非常に役立つことがわかりました。https://github.com/harelba/q

たとえば、サンプル目標は次のように達成できます。

$ q "select c2, sum(c3) from data group by c2"
u1 423404
u2 3948

sqliteをバックエンドとして使用するため、さまざまなsqlite関数を使用して計算できます。

おすすめ記事