1

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

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

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

4

3 回答 3

2

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

cat original_list | wc -l

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

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

于 2012-06-26T20:59:44.210 回答
2

尝试

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

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

于 2012-06-26T20:56:59.013 回答
1

问题

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

解决方案

鉴于以下假设:

  1. 您的电子邮件存储在名为emails_xxxx.txt的文件中。(注意:您可以为它们命名任何您喜欢的名称,但是一组易于使用的合理文件名将使您的生活更简单。)
  2. 每行包含一个地址。

你可以用一个短管道来处理这个问题。排序将接受一个 glob 模式或多个文件参数(例如来自xargs),因此您可以避免“无用的 cat 使用”。然后,您将输出通过管道传输到split中,您可以在其中控制分块的各个方面。例如:

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

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

样本输出

creating file `x0000'
creating file `x0001'
于 2012-06-26T21:22:14.187 回答