请求分析大规模邮件列表并提取排名前100的域名
提取邮件列表中频次Top100域名的实用方法
嘿,要处理大规模邮件列表提取Top100域名?这两个方法肯定能帮到你,一个是快速的命令行工具组合,另一个是灵活的Python脚本,按需选就行~
一、命令行快速处理(适合Linux/macOS环境)
如果你的邮件列表是空格分隔的文本(就像你给的示例那样),用几个基础命令就能快速搞定,全程不用写代码:
- 先把邮件拆成每行一个:把空格分隔的内容转换成每行一个邮件地址,方便后续处理
tr ' ' '\n' < 你的邮件文件名.txt > emails_per_line.txt - 提取域名部分:用
awk以@为分隔符,取@后面的域名内容awk -F '@' '{print $2}' emails_per_line.txt > domains.txt - 统计频次并取Top100:先排序、去重计数,再按次数降序排列,最后取前100条
解释一下:sort domains.txt | uniq -c | sort -nr | head -n 100uniq -c:统计每个域名出现的次数,前缀是次数sort -nr:按数字逆序排序(次数多的排在前面)head -n 100:只保留前100条结果
小提示:如果邮件列表里有重复的完整邮箱地址,想先去重再统计域名,可以在第一步之后加这行:
sort emails_per_line.txt | uniq > unique_emails.txt
然后用unique_emails.txt代替emails_per_line.txt做后续步骤就行。
二、Python脚本处理(适合定制化需求)
如果需要更灵活的处理(比如处理带特殊字符的邮箱、自动保存结果到文件、后续做更多分析),写个简单的Python脚本就很方便:
from collections import Counter # 读取邮件列表文件(替换成你的文件名) with open('emails.txt', 'r', encoding='utf-8') as f: content = f.read().strip() # 分割成单个邮件地址(如果是逗号分隔,就把split()改成split(',')) emails = content.split() # 提取域名,过滤掉格式不正确的邮箱(没有@的) domains = [] for email in emails: if '@' in email: domain = email.split('@')[1] domains.append(domain) # 统计域名频次,取前100 top_100_domains = Counter(domains).most_common(100) # 打印结果 print("域名频次Top100:") for rank, (domain, count) in enumerate(top_100_domains, start=1): print(f"{rank}. {domain}:{count}次") # 保存结果到文件 with open('top_100_domains_result.txt', 'w', encoding='utf-8') as f: f.write("域名频次Top100:\n") for rank, (domain, count) in enumerate(top_100_domains, start=1): f.write(f"{rank}. {domain}:{count}次\n")
这个脚本的好处是:
- 自动过滤掉格式错误的邮箱(没有@的)
- 可以轻松调整分隔符(比如逗号、制表符)
- 结果既可以打印到控制台,也能保存成文件方便后续查看
内容的提问来源于stack exchange,提问作者kingcope
相关产品推荐
相关产品推荐

