最初の列に基づいてグループ化

最初の列に基づいてグループ化

次のパターンのファイルがあります

a 12
a 13
a 15
a 14
b 5
b 6
c 2
c 5

以下のように、最初の列に基づいてグループ化したいと思います。

a 12 13 15 14
b 5 6
c 2 5

提案してください

ベストアンサー1

データが(質問のように)最初の列に基づいてソートされたと仮定し、GNUを使用してスペースで区切られた最初の列に基づいてdatamashグループ化し、2番目の列を縮小します。

$ datamash -W groupby 1 collapse 2 <file
a       12,13,15,14
b       5,6
c       2,5

目的の出力を取得するには、結果の最初の列の後のタブとコンマを空白に置き換えます。

$ datamash -W groupby 1 collapse 2 <file | tr '\t,' '  '
a 12 13 15 14
b 5 6
c 2 5

入力が最初の列でソートされていない場合、sortデータは最初に渡されるか()オプションdatamashと一緒に使用されます。-s--sort


また、使用することができますミラー( mlr)そしてそのnest仕事。この関数を使用すると、2 番目の列の値を、最初の列の各固有値をスペースで区切られたリストに「埋め込む」ことができます。

$ mlr --nidx nest --implode --values --across-records --nested-fs space -f 2 file
a 12 13 15 14
b 5 6
c 2 5

または、--ivarMillerバージョン5.5.0以降で略語を使用してください(6.0.0を除く)。壊れた):

$ mlr --nidx nest --ivar space -f 2 file
a 12 13 15 14
b 5 6
c 2 5

データを事前にソートする必要はありません。

おすすめ記事