Unixには、ストリームで関係代数に似た操作を実行するためのいくつかのユーティリティがあります(grep
、、、、、に追加)。すぐに利用可能な(またはほとんどのLinuxディストリビューションにインストール可能な)グループ集約ユーティリティはありますか?join
cut
awk
目的は、次のように、ある列にいくつかのキーがあり、他の列にいくつかの値を持つファイルを取得することです。
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関数を使用して計算できます。