如何从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
之前,您没有对输入进行排序。从man
uniq
开始:

过滤相邻的匹配行

如果匹配行不相邻,uniq将再次打印它们

对于您的情况,您可以使用
sort-u
。但是
排序| uniq-u
也可以工作

注:

  • 您正在每个循环中重新创建文件
    topails.txt
    ,因为您使用了
    。很可能您希望附加到文件中
  • 文件的
    。。如果-f
    看起来可以在读取时用
    find./$(毒液)-类型f
    和a
    替换,也可以用
    find./(毒液)-类型f | xargs cat | tr'[:upper:'[:lower:'..
  • 不需要
    tr
    中课前和课后的
    [
    ]
    。因为在输入和替换中都指定了它们,所以tr将替换
    [
    [
    ]
    ][/code>,它们被解释为普通字符,而不是经过特殊处理

在传递到
uniq-u
之前,您没有对输入进行排序。从man
uniq
开始:

过滤相邻的匹配行

如果匹配行不相邻,uniq将再次打印它们

对于您的情况,您可以使用
sort-u
。但是
排序| uniq-u
也可以工作

注:

  • 您正在每个循环中重新创建文件
    topails.txt
    ,因为您使用了
    。很可能您希望附加到文件中
  • 文件的
    。。如果-f
    看起来可以在读取时用
    find./$(毒液)-类型f
    和a
    替换,也可以用
    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