Короткий поиск в Google дал несколько решений FUSE:
С 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
Использование GNUdatamash
:
$ datamash -W -g 1 collapse 2 < input.txt
url1 acct2
url2 acct1
url3 acct1,acct2
url4 acct2,acct3,acct5
Опции:
-W
используйте пробелы/табуляции в качестве разделителя полей -g 1
группа на первом поле collapse 2
разделенный запятой -список значений второго поля Вы можете преобразовать запятые в пробелы с помощьюtr
:
$ datamash -W -g 1 collapse 2 < input.txt | tr ',' ' '
url1 acct2
url2 acct1
url3 acct1 acct2
url4 acct2 acct3 acct5
Если вам нужно отсортировать вывод по первому полю, добавьте-s
:
datamash -s -W -g 1 collapse 2 < input.txt | tr ',' ' '