user-history.txt
次のパターンのファイルがあります。
user-1 6
user-1 7
user-2 6
user-2 7
user-2 8
user-3 6
user-3 7
user-3 9
user-4 6
各ユーザーが一度だけ言及されるようにレコードをマージし、2番目の列を別々にマージしたいと思います。
希望の出力
user-1 6,7
user-2 6,7,8
user-3 6,7,9
user-4 6
私が試したこと
まだ経験がないため、この問題を解決できません。私は他の解決策を探していますが、同様の質問がありますが、特定の問題を解決する方法が見つかりませんでした。
(G)AWKがこれを行うための最も簡単なツールではない場合は、他のソリューションを使用できます。
詳しく説明すると、知識が向上します。
ベストアンサー1
$ datamash -W groupby 1 collapse 2 <user-history.txt
user-1 6,7
user-2 6,7,8
user-3 6,7,9
user-4 6
これは、GNUを使用してdatamash
2番目の列()の項目を縮小し、それをcollapse 2
最初の列(、、または)のキーにグループ化して、連続する空白文字をフィールド区切り文字(、または)として扱います。groupby 1
-g 1
-W
--whitespace
データがまだソートされていない場合はdatamash
with--sort
またはを使用し-s
、無視するデータに重複したキーと値のペアがある場合はunique 2
代わりにを使用してくださいcollapse 2
。