我有一个功能,可以输出在大型文本文件中找到的电子邮件地址列表,并输出如下:
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循环中对其进行迭代,我也想删除重复项。
我尝试了sed的一些变体,但实际上并不能做我想做的事。任何提示都是很棒的。
答案 0 :(得分:1)
这是快速而肮脏的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
答案 1 :(得分:0)
您是否尝试过仅将'\ n'替换为','?在运行sed之前对-u进行排序将确保唯一值(无重复)
我复制了您的电子邮件列表,并将其粘贴到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