リストは最初のフィールドに基づいてソートされます。最初のフィールドが同じ行に2番目のフィールドを追加する方法は?

リストは最初のフィールドに基づいてソートされます。最初のフィールドが同じ行に2番目のフィールドを追加する方法は?

2つのフィールドを持つ複数のリストがあります。最初のフィールドにはURLが含まれ、2番目のフィールドにはEメールアドレス(アカウント)が含まれています。 2番目のフィールドは、リスト内のすべての項目について同じです。

このリストを1つのリストにリンクし、最初のフィールドに基づいてソートします。ほとんどのアイテムは一意ですが、一部のアイテムは重複またはトリプルアイテムです(たとえば、URLは複数のアカウントのリストにあります)。

必要に応じて2番目のフィールドがアカウントリストになるように重複エントリを結合するために使用できるコマンドまたはスクリプトはありますか?

たとえば、

URL 1 アカウント 2
URL2アカウント1
url3アカウント1
url3アカウント2
url4アカウント2
url4アカウント3
url4アカウント5
...

次のようにする必要があります。

URL 1 アカウント 2
URL2アカウント1
url3アカウント1アカウント2
url4アカウント2アカウント3アカウント5
...

ベストアンサー1

ベルトsort+awkパイプ:

sort -k1,1 file \
| awk 'url && $1 != url{ print url, acc }
      { acc = ($1 == url? acc FS:"") $2; url = $1 }END{ print url, acc }' OFS='\t'

出力例:

url1    acct2
url2    acct1
url3    acct1 acct2
url4    acct2 acct3 acct5

おすすめ記事