Этот bash-сценарий на данный момент имеет простую предпосылку: рекурсивно просматривать каталог, извлекать каждый файл из этого каталога, и из этих файлов искать шаблоны, которые соответствуют адресам электронной почты, брать эти адреса электронной почты, сортировать их, а затем подсчитывать суммураз они появляются, и сортируйте их снова.
Возьмите эти отсортированные электронные письма и затем с помощью скрипта head напечатайте верхние электронные письма в соответствии с переменной PUNISHED.
Каталог через второй аргумент, и если каталог не выбран, он просто проходит через текущий каталог.
вот так.
. / Myscript 20 / usr/ home / AlabasterTenRing
Вот код.
#!/bin/bash
shopt -s globstar
PUNISHED=$1
VENOM= $2
echo >> topemails.txt
for files in ./${VENOM}/**/*; do
if [ -f "${files}" ] ; then
<"$files" tr '[[:upper:]]' '[[:lower:]]' \
| grep -i -o '[A-Za-z0-9._%+-]\ + @[A-Za-z0-9.]\ + .[A-Za-z]\{2,4\}' \
| xargs -n 1 \
| sort \
| uniq -c \
| sort -nr > topemails.txt
fi
done
echo "The top \"${PUNISHED}\" emails are"
head -$PUNISHED topemails.txt
В итоге вместо этого происходит то, что topemails.txt печатает так, как задумано, но число «1» - это все, что появляется в нем.
Что я мог сделать по-другому?