私が試したこと

私が試したこと

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を使用してdatamash2番目の列()の項目を縮小し、それをcollapse 2最初の列(、、または)のキーにグループ化して、連続する空白文字をフィールド区切り文字(、または)として扱います。groupby 1-g 1-W--whitespace

データがまだソートされていない場合はdatamashwith--sortまたはを使用し-s、無視するデータに重複したキーと値のペアがある場合はunique 2代わりにを使用してくださいcollapse 2

おすすめ記事