Вот ситуация, я написал небольшой скрипт для создания списка IP-адресов, с которых электронная почта была отвергнута:Добавление новых записей из Баш массива в текстовый файл
msgid_array=($(grep ' sendmail\[' /var/log/maillog |
egrep -v 'stat=(Sent|queued|Please try again later)' |
egrep dsn='5\.[0-9]\.[0-9]' | awk '{print $6}'))
for z in ${msgid_array[@]}; do
ip_array[x++]=$(grep $z /var/log/maillog | egrep -m 1 -o 'relay=.*' |
egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}')
done
Так что это делает он ищет все идентификаторы сообщений отклоненных сообщений электронной почты и сохраняет их в файле msgid_array.
Затем, используя цикл for, grep представляет собой maillog с каждым идентификатором сообщения и отфильтровывает IP-адрес отправителя и сохраняет все IP-адреса в ip_array.
Теперь я намереваюсь запускать это каждый день и позволяю ему анализировать записи журнала за вчерашний день, а затем сохранять результаты в отдельном файле txt.
Если у меня есть запись "reject_ip_addresses =" в моем txt-файле, как я могу просто добавить новые IP-адреса в существующий список?
Итак, сегодня я запускаю его и запись выглядит следующим образом:
rejected_ip_adresses=1.1.1.1 2.2.2.2
Завтра, когда я запускаю это массив выглядит так, потому что одни и те же 2 отправителей были проблемы с отправкой по электронной почте, но есть 2 новых из них:
ip_array=(1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4)
Так моя запись в формате TXT должен выглядеть следующим образом, точка существо имея ежемесячный обзор всех проблемных адресов:
rejected_ip_adresses=1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4
Спасибо за любые идеи, в настоящее время мой мозг отказывается мне помочь.
Я думал об использовании сорта -u, просто не понял оптимального подхода, это кажется простым и функциональным, и спасибо за оптимизацию, я всегда получаю отличный ответ от вас. Dennis :) – f10bit
Сортировка команда может быть упрощена с помощью ключа -o, поэтому строка будет выглядеть так: sort -u problem_ips.txt -o problem_ips.txt – f10bit