我需要搜索一个目录ARCHIVE,它包含许多子目录,每个目录都包含文件。每个文件都有一个电子邮件地址。我想列出所有的电子邮件地址',@ blah.com被截断,然后列出每个名字的出现次数。
我想出了如何查找电子邮件并截断@部分,但我无法弄清楚如何计算每个名称出现的次数。
grep -R '^To: ' $ARCHIVE | cut -d@ -f1 | awk '{print $2}' | sort | uniq
由于某种原因,我无法在脚本中使用它;每当我调用它它什么都不做,但如果我把它放在命令行中它就可以工作。
答案 0 :(得分:1)
Grep有一个计数选项。
如果您设置了足够强大的注册表来直接匹配电子邮件,您可以使用一个命令计算所有事件:
E.G。
$ echo -e "1\n\2\n3\n\4" | grep [0-9] -c
4
那就是说,我认为你所做的最好用sed和awk完成:
sed 's/@.*//' tmp/mails | sort | uniq | \
while read name ;
do
echo $name;
awk '$1 ~ /'$name'/ { ++c; } END {print c;}' tmp/mails ;
done
cat tmp/mails:
$ cat tmp/mails
arne@gmail.com
arnt@treemail.com
jonas@hotmail.com
arne@gmail.com
kari@yahoo.no
alex@wee.moo
arne@gmail.com
jonas@hotmail.com
kari@yahoo.no
jonas@hotmail.com
kari@yahoo.no
$ sed 's/@.*//' tmp/mails | sort | uniq | while read name ;do echo $name; awk '$1 ~ /'$name'/ { ++c; } END {print c;}' tmp/mails ;done
alex
1
arne
3
arnt
1
jonas
3
kari
3
答案 1 :(得分:1)
因此,通过我们长时间的评论对话,我会这样做:
grep -R '^To: ' $ARCHIVE | cut -d@ -f1 | awk '{print $2}' | sort | uniq -c > ind.txt && wc -l ind.txt >> ind.txt
这将获取uniq
命令的输出,将其写入文件,然后收集总数并将其附加到同一文件中,以便在底部查看。
或者正如杰夫指出你可以做uniq -c file.txt | awk '{print}END{print NR}'
。