Bash 如何从电子邮件地址列表中找到两个最常出现的域?

Bash 如何从电子邮件地址列表中找到两个最常出现的域?,bash,shell,Bash,Shell,我是编程新手,我想做的是: 例如,我有: a@hotmail.com b@hotmail.com c@hotmail.com g@gmail.com s@gmail.com h@msn.com h@yahoo.com 我需要找到两个最常用的电子邮件域。在本例中,这是hotmail.com和gmail.com 如何使用shell脚本来实现这一点?这可以让您开始。它统计每个域的出现次数,然后按计数降序排列 awk -F'@' 'domains[$2]++{} END{ for (d in doma

我是编程新手,我想做的是:

例如,我有:

a@hotmail.com
b@hotmail.com
c@hotmail.com
g@gmail.com
s@gmail.com
h@msn.com
h@yahoo.com
我需要找到两个最常用的电子邮件域。在本例中,这是
hotmail.com
gmail.com


如何使用shell脚本来实现这一点?

这可以让您开始。它统计每个域的出现次数,然后按计数降序排列

awk -F'@' 'domains[$2]++{} END{ for (d in domains) print d, domains[d]; }' | sort -rnk2

这可以让你开始。它统计每个域的出现次数,然后按计数降序排列

awk -F'@' 'domains[$2]++{} END{ for (d in domains) print d, domains[d]; }' | sort -rnk2

这可以让你开始。它统计每个域的出现次数,然后按计数降序排列

awk -F'@' 'domains[$2]++{} END{ for (d in domains) print d, domains[d]; }' | sort -rnk2

这可以让你开始。它统计每个域的出现次数,然后按计数降序排列

awk -F'@' 'domains[$2]++{} END{ for (d in domains) print d, domains[d]; }' | sort -rnk2

您可以使用
uniq-c
来计算已排序项目列表中每个项目的数量。有了这些,我们只需适当地进行切割和排序:

$ cut -d @ -f 2 yourlist | sort | uniq -c | sort -rn

  3 hotmail.com
  2 gmail.com
  1 yahoo.com
  1 msn.com

$

您可以使用
uniq-c
来计算已排序项目列表中每个项目的数量。有了这些,我们只需适当地进行切割和排序:

$ cut -d @ -f 2 yourlist | sort | uniq -c | sort -rn

  3 hotmail.com
  2 gmail.com
  1 yahoo.com
  1 msn.com

$

您可以使用
uniq-c
来计算已排序项目列表中每个项目的数量。有了这些,我们只需适当地进行切割和排序:

$ cut -d @ -f 2 yourlist | sort | uniq -c | sort -rn

  3 hotmail.com
  2 gmail.com
  1 yahoo.com
  1 msn.com

$

您可以使用
uniq-c
来计算已排序项目列表中每个项目的数量。有了这些,我们只需适当地进行切割和排序:

$ cut -d @ -f 2 yourlist | sort | uniq -c | sort -rn

  3 hotmail.com
  2 gmail.com
  1 yahoo.com
  1 msn.com

$


问题还不清楚。你是在计算这里唯一域名的数量吗?i、 你有hotmail、gmail、msn和yahoo,所以总共有4个?欢迎使用Stack Overflow。请尽快阅读这一页。一般来说,这里的人不会为您编写代码,但会帮助您解决问题。学习编程需要你对需要完成的步骤进行逻辑思考,然后找到实现这些步骤的机制。例如,您需要修改文件的内容(而不修改文件本身),这样您就只有域名了。然后你需要计算每个域的出现次数,然后找到两个最常见的域。@JonathanLeffler哦,我不知道,人们会尝试回答各种各样的问题。但答案的质量在很大程度上取决于问题的质量。忽略我的评论。我认为这些评论是针对我提出的一个问题,你们已经编辑过了。天哪,我是个白痴,问题还不清楚。你是在计算这里唯一域名的数量吗?i、 你有hotmail、gmail、msn和yahoo,所以总共有4个?欢迎使用Stack Overflow。请尽快阅读这一页。一般来说,这里的人不会为您编写代码,但会帮助您解决问题。学习编程需要你对需要完成的步骤进行逻辑思考,然后找到实现这些步骤的机制。例如,您需要修改文件的内容(而不修改文件本身),这样您就只有域名了。然后你需要计算每个域的出现次数,然后找到两个最常见的域。@JonathanLeffler哦,我不知道,人们会尝试回答各种各样的问题。但答案的质量在很大程度上取决于问题的质量。忽略我的评论。我认为这些评论是针对我提出的一个问题,你们已经编辑过了。天哪,我是个白痴,问题还不清楚。你是在计算这里唯一域名的数量吗?i、 你有hotmail、gmail、msn和yahoo,所以总共有4个?欢迎使用Stack Overflow。请尽快阅读这一页。一般来说,这里的人不会为您编写代码,但会帮助您解决问题。学习编程需要你对需要完成的步骤进行逻辑思考,然后找到实现这些步骤的机制。例如,您需要修改文件的内容(而不修改文件本身),这样您就只有域名了。然后你需要计算每个域的出现次数,然后找到两个最常见的域。@JonathanLeffler哦,我不知道,人们会尝试回答各种各样的问题。但答案的质量在很大程度上取决于问题的质量。忽略我的评论。我认为这些评论是针对我提出的一个问题,你们已经编辑过了。天哪,我是个白痴,问题还不清楚。你是在计算这里唯一域名的数量吗?i、 你有hotmail、gmail、msn和yahoo,所以总共有4个?欢迎使用Stack Overflow。请尽快阅读这一页。一般来说,这里的人不会为您编写代码,但会帮助您解决问题。学习编程需要你对需要完成的步骤进行逻辑思考,然后找到实现这些步骤的机制。例如,您需要修改文件的内容(而不修改文件本身),这样您就只有域名了。然后你需要计算每个域的出现次数,然后找到两个最常见的域。@JonathanLeffler哦,我不知道,人们会尝试回答各种各样的问题。但答案的质量在很大程度上取决于问题的质量。忽略我的评论。我认为这些评论是针对我提出的一个问题,你们已经编辑过了。天哪,我是个白痴。我觉得你的第一种是不必要的。此外,如果只需要域名,那么你可以
head
cut
将其稍微剪切一点:
cut-d-f2 yourlist | uniq-c | sort-rn | head-n2 | cut-c9
。由于
uniq
只检查相邻的行,因此需要为
uniq
创建一个排序列表才能工作。如果列表中没有所有的域名,它将