BASH - 如何检查多个文件中的重复电子邮件地址?

时间:2012-06-26 20:53:54

标签: bash email split unique chunks

我目前正在开展一个项目,我需要向大量电子邮件地址发送电子邮件。因此,我试图避免任何"临时"关于服务提供商限制电子邮件等的故障。

我的计划是获取电子邮件地址的初始列表并将其整理成较小的(切碎的)列表,以便可以以交错的方式安排它们。由于发送电子邮件的敏感性,我希望确保在任何切碎列表中不存在重复的电子邮件地址。有没有办法通过bash来做到这一点?

旁注,我100%确定主列表中的所有电子邮件地址都是唯一的,因为用于组成列表的查询的性质,我只想确保,我的脚本切断​​了主列表,没有缺陷在切碎的列表中创建重复的电子邮件地址。

3 个答案:

答案 0 :(得分:2)

尝试

 cat *.txt | sort | sort -u -c

鉴于您的文件名以.txt结尾。 第一个排序命令命令所有电子邮件地址。第二个sort命令检查没有两个连续的行相等,并在另一个情况下抛出错误。

答案 1 :(得分:2)

您可以通过cat将切碎的文件放在一起(暂时)并使用sort --unique删除重复项 - 然后检查结果是否与原始文件一样多行:

cat original_list | wc -l

cat list_part* | sort --unique | wc -l

如果结果相同则没有重复。

答案 2 :(得分:1)

问题

您需要对唯一地址进行排序,然后将有序列表拆分为块。

解决方案

考虑以下假设:

  1. 您的电子邮件存储在名为 emails_xxxx.txt 的文件中。 (注意:您可以将它们命名为任何您喜欢的名称,但是一组易于使用的合理文件名将使您的生活更加简单。)
  2. 每一行都有一个地址。
  3. 你可以用一个简短的管道处理这个问题。 Sort 将接受glob模式或多个文件参数(例如来自 xargs ),因此您可以避免“无用的使用cat”。然后,您将输出通过管道传输到 split ,您可以在其中控制分块的各个方面。例如:

    sort --unique emails_*.txt |
    split --numeric-suffixes \
          --lines=200 \ 
          --suffix-length=4 \
          --verbose
    

    这会将已排序/已过滤的行拆分为最多200行的块,并使用适合批处理的数字扩展名为每个块命名。您可以调整线条和后缀长度以满足您的要求。

    样本输出

    creating file `x0000'
    creating file `x0001'