Я написал программу, которая берет список электронных писем из каталога и всех его подкаталогов и подсчитывает каждое полученное электронное письмо.
То, что я хочу сделать сейчас, это взять из списка ТО и показать список доменов, которые появляются чаще всего.
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
Проблема, с которой я продолжаю сталкиваться, заключается в том, что я получаю домены, которые повторяютсясами в моем списке, что не должно произойти, если я использую uniq -u, верно?
Мой код работает следующим образом, я называю скрипт с N переменными и каталогом.
. / Myscript 10 / home / alabasterTenRing /
Это напечатало бы списоксообщений электронной почты, которые чаще всего появляются в файлах из этого домена и его подкаталогов, и затем он должен распечатать список доменов, которые появляются чаще всего, а также поместить эти доменные имена в файл.
Однако, вот список имен доменов, которые появляются:
mail.goo.ne.jp
gmail.com
jlt3.sipsolutions.net
freewrt.org
yahoo.com
in.ibm.com
gmail.com
arm.com
arndb.de
gmail.com
gmail не должен повторяться дважды, не говоря уже о трех. Очевидно, что я сделал что-то не так, где я ошибся?