如何从Bash中的电子邮件列表中获取域名列表?
我写了一个程序,它从一个目录及其所有子目录中获取电子邮件列表,并统计发生的每一封电子邮件 我现在想做的是从这个列表中提取并显示一个显示最多的域的列表如何从Bash中的电子邮件列表中获取域名列表?,bash,Bash,我写了一个程序,它从一个目录及其所有子目录中获取电子邮件列表,并统计发生的每一封电子邮件 我现在想做的是从这个列表中提取并显示一个显示最多的域的列表 shopt -s globstar PUNISHED=$1 VENOM=$2 echo >> topemails.txt echo >> emails_top_domains.txt for files in ./$(VENOM)/**/*; do if [ -f "${files}" ] ; then
shopt -s globstar
PUNISHED=$1
VENOM=$2
echo >> topemails.txt
echo >> emails_top_domains.txt
for files in ./$(VENOM)/**/*; do
if [ -f "${files}" ] ; then
< "$files" tr '[[:upper:]]' '[[:lower:]]' \
| grep -Eiorh '([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,4})' 2> /dev/null \
| sort -nr \
| uniq -c > topemails.txt
fi
done
< topemails.txt \
| grep -Eiorh '(@[[:alnum:].-]+?\.[[:alpha:].]{2,4})' 2> /dev/null \
| tr -d "@" \
| uniq -u > emails_top_domains.txt
echo "The top \"${PUNISHED}\" emails are"
head -$PUNISHED topemails.txt
echo "The top domains are"
head -$PUNISHED emails_top_domains.txt
gmail不应该重复两次,更不用说三次了。很明显我做错了什么,我哪里做错了 在传递到
uniq-u
之前,您没有对输入进行排序。从manuniq
开始:
过滤相邻的匹配行
如果匹配行不相邻,uniq将再次打印它们
对于您的情况,您可以使用sort-u
。但是排序| uniq-u
也可以工作
注:
- 您正在每个循环中重新创建文件
,因为您使用了topails.txt
。很可能您希望附加到文件中 - 文件的
看起来可以在读取时用。。如果-f
和afind./$(毒液)-类型f
替换,也可以用
find./(毒液)-类型f | xargs cat | tr'[:upper:'[:lower:'..
- 不需要
中课前和课后的tr
]。因为在输入和替换中都指定了它们,所以tr将替换[
的[
和[
的]
][/code>,它们被解释为普通字符,而不是经过特殊处理
uniq-u
之前,您没有对输入进行排序。从manuniq
开始:
过滤相邻的匹配行
如果匹配行不相邻,uniq将再次打印它们
对于您的情况,您可以使用sort-u
。但是排序| uniq-u
也可以工作
注:
- 您正在每个循环中重新创建文件
,因为您使用了topails.txt
。很可能您希望附加到文件中 - 文件的
看起来可以在读取时用。。如果-f
和afind./$(毒液)-类型f
替换,也可以用
find./(毒液)-类型f | xargs cat | tr'[:upper:'[:lower:'..
- 不需要
中课前和课后的tr
]。因为在输入和替换中都指定了它们,所以tr将替换[
的[
和[
的]
][/code>,它们被解释为普通字符,而不是经过特殊处理
uniq-u
替换为sort-u
。祝你好运。将uniq-u
替换为sort-u
。祝你好运。明白了,顺便问一下,我应该用>>替换>吗?明白了,顺便问一下,我应该用>>替换>吗?
mail.goo.ne.jp
gmail.com
jlt3.sipsolutions.net
freewrt.org
yahoo.com
in.ibm.com
gmail.com
arm.com
arndb.de
gmail.com