Как я могу группировать электронные письма по домену, комбинированные и обобщенные из всех файлов в каталоге?

У меня есть файлы 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
1
задан 25 January 2017 в 17:14

2 ответа

Вот версия 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

Порядок не совсем то, что вы просили

5
ответ дан 23 May 2018 в 02:05
  • 1
    Спасибо за ваш ответ. Но возможно ли предоставить полную папку вместо одного файла – Jaffer Wilson 25 January 2017 в 13:31
  • 2
    @JafferWilson, вы действительно должны начать пробовать эти вещи самостоятельно. Кажется, вы рассматриваете этот сайт как бесплатную службу написания скриптов. Конечно, между несколькими ответами, которые вы получили до сих пор, вы должны начать учиться писать самостоятельно. По крайней мере, вы можете искать google для итерации по файлам в каталоге " или что-то. – terdon♦ 25 January 2017 в 15:33
  • 3
    @JafferWilson perl one-liner неявно будет читать и перебирать несколько файлов в командной строке, поэтому, если список файлов не превышает ARG_MAX оболочки, вам не нужно делать ничего, кроме оболочки glob файлов в каталоге , В противном случае вам нужно будет изменить его для циклического перемещения содержимого каталога внутри - см., Например, Открыть и прочитать из файлов – steeldriver 25 January 2017 в 17:00

Использование 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
2
ответ дан 23 May 2018 в 02:05
  • 1
    Это не дает ожидаемого результата. Что-то другое, чем ответ. Но попытка оценивается. спасибо – Jaffer Wilson 25 January 2017 в 15:24
  • 2
    @JafferWilson О? За исключением заказа, я получаю тот же результат, что, скажем, ответ steeldriver askubuntu.com/a/875979/158442 – muru 25 January 2017 в 15:26

Другие вопросы по тегам:

Похожие вопросы: