次のパターンのファイルがあります
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
または、--ivar
Millerバージョン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
データを事前にソートする必要はありません。