【发布时间】:2021-03-04 21:45:37
【问题描述】:
我有一个日志文件(大约 50K 行),格式为:
email1@gmail.com:address0:some_details0
email2@gmail.com:address1:some_details1
email1@yahoo.com:address2:some_details2
email2@yahoo.com:address3:some_details3
我正在尝试读取此文件并将其拆分为两个文件夹(gmail.com 和 yahoo.com),然后将每一行写入以电子邮件 ID 命名的唯一文件。我下面的代码有效,但速度很慢。有人可以帮我让它更快更有效吗?将不胜感激。
#/bin/sh
grep -hv -P "[^[:ascii:]]" * |
awk -F":" '
{
if ($1 ~ /^[[:alnum:]_.+-]+@[[:alnum:]_.-]+\.[[:alnum:]]/ && NF>1 && $NF!="")
{
split($1, arr, "@")
system("mkdir -p "tolower(arr[2]))
print $0 >> tolower(arr[2])"/"tolower(arr[1])
}
}'
PS:正则表达式是确保电子邮件地址有效的基本检查。我没有做过重的检查。起初我认为正则表达式使我的代码变慢,但并非如此。即使没有正则表达式,代码也非常慢。我认为 I/O 使这变慢了。我们如何改进?
【问题讨论】: