bash скрипт конвертирует вывод в массив и удаляет дубликаты - PullRequest
0 голосов
/ 13 июля 2020

У меня есть функция, которая выводит список адресов электронной почты, найденных в большом текстовом файле, и выводит следующее:

Testing@outlook.com
Some_Email@gmail.com
Testing@outlook.com
Some_Email@gmail.com
John.Doe@test.com
Smith@hello.co.uk, orange123@testing.com
John.Doe@test.com
Smith@hello.co.uk, orange123@testing.com
contact@email.com
support@email.com, contact@email.com

Мне нужно преобразовать этот вывод в разделенный запятыми массив адресов электронной почты, который я может повторяться в for l oop, я также хотел бы удалить дубликаты.

Я пробовал несколько вариантов sed и не смог сделать то, что хочу. Любые подсказки были бы замечательными.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вот быстрый и грязный awk, который сделает это за вас:

awk 'BEGIN{FS="[[:blank:],]+"; OFS=","}{for(i=1;i<=NF;++i) a[tolower($i)]}
     END{s=""; for(i in a) s=s (s?OFS:"") i; print s}' file

Это устраняет дублирующиеся электронные письма с разными заглавными буквами. Список не сортируется.

Если вы хотите, чтобы порядок был идентичным, я бы сделал следующее:

awk 'BEGIN{FS="[[:blank:],]+"; OFS=","}
     { for (i=1;i<=NF;++i) {
         e=tolower($i)
         if (!(e in a)) { printf (p==0?"":OFS) "%s", e; a[e]; p=1 }
     }}' file
0 голосов
/ 14 июля 2020

пробовали ли вы заменить только '\ n' на ','? sort -u перед запуском sed обеспечит уникальные значения (без дубликатов)

Я скопировал ваш список адресов электронной почты и вставил его в email.txt

sort -u email.txt -o email.txt && sed -i ':a;N;$!ba;s/\n/,/g' email.txt

Вот результат файла, который Я получил из приведенной выше команды

contact@email.com,John.Doe@test.com,Smith@hello.co.uk, orange123@testing.com,Some_Email@gmail.com,support@email.com, contact@email.com,Testing@outlook.com

с использованием tr также должно работать

tr '\n' ',' < email.txt > csv.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...