У меня есть файлы CSV. Каждый файл имеет список адресов электронной почты. Ниже приведены извлеченные данные из файла:
%%%%%%%%%%@yahoo.com
%%%%%%@wanadoo.fr
%%%%raviplywoodglasscentre@yahoo.comravi
%%nameemail%%@yahoo.com
%.getincontact@numberland.com
%1%3@example.com
%1@example.com
То, что я пытаюсь сделать, - это извлечение доменов из этого адреса электронной почты, а затем упорядочение адресов электронной почты таким образом, что электронные письма, связанные с определенным доменом перечислены вместе. Например:
yahoo.com,%%%%%%%%%%@yahoo.com
wanadoo.fr,%%%%%%@wanadoo.fr
yahoo.comravi,%%%%raviplywoodglasscentre@yahoo.comravi
yahoo.com,%%nameemail%%@yahoo.com
numberland.com,%.getincontact@numberland.com
example.com,%1%3@example.com
example.com,%1@example.com
Конечный результат, который я пытаюсь получить, выглядит следующим образом:
yahoo.com,%%%%%%%%%%@yahoo.com,%%nameemail%%@yahoo.com
wanadoo.fr,%%%%%%@wanadoo.fr
yahoo.comravi,%%%%raviplywoodglasscentre@yahoo.comravi
numberland.com,%.getincontact@numberland.com
example.com,%1%3@example.com,%1@example.com
Вот версия perl, используя хэш анонимных массивов:
$ perl -F@ -alne '
push @{ $h{$F[1]} }, $_ }{
for $k (reverse sort keys %h) {print join ",", $k, @{ $h{$k} }
}' emails.csv
yahoo.comravi,%%%%raviplywoodglasscentre@yahoo.comravi
yahoo.com,%%%%%%%%%%@yahoo.com,%%nameemail%%@yahoo.com
wanadoo.fr,%%%%%%@wanadoo.fr
numberland.com,%.getincontact@numberland.com
example.com,%1%3@example.com,%1@example.com
Порядок не совсем то, что вы просили
Использование awk:
awk -F, '{a[$1] = a[$1]","$2} END {for (i in a) print i a[i]}'
Выход не находится в каком-либо конкретном порядке:
$ awk -F, '{a[$1] = a[$1]","$2} END {for (i in a) print i a[i]}' foo
yahoo.comravi,%%%%raviplywoodglasscentre@yahoo.comravi
yahoo.com,%%%%%%%%%%@yahoo.com,%%nameemail%%@yahoo.com
numberland.com,%.getincontact@numberland.com
example.com,%1%3@example.com,%1@example.com
wanadoo.fr,%%%%%%@wanadoo.fr