В настоящее время я пишу простой скрипт .sh для анализа файла журнала Exim на наличие строк, соответствующих «o». В настоящее время при просмотре файла output.txt на каждой строке печатается 0 (606 строк). Я предполагаю, что моя логика неверна, так как awk не выдает никаких ошибок.
Вот мой код (обновлен для конкатенации и встречных проблем). Изменить: я принял новый код из ответа dmckee, с которым я сейчас работаю над старым кодом в пользу простоты.
awk '/o'\''/ {
line = "> ";
for(i = 20; i <= 33; i++) {
line = line " " $i;
}
print line;
}' /var/log/exim/main.log > output.txt
Есть идеи?
РЕДАКТИРОВАТЬ: Ради ясности, я говорю «o» в адресах электронной почты, потому что «это недопустимый символ в адресах электронной почты (и в наших базах данных появляется только с префиксами o»)
РЕДАКТИРОВАТЬ 2: В соответствии с запросом на комментарий, вот санитарный образец некоторого желаемого результата:
[xxx.xxx.xxx.xxx] kathleen.o'toole@domain.com <kathleen.o'toole@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] julie.o'brien@domain.com <julie.o'brien@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] james.o'dell@domain.com <james.o'dell@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] daniel_o'leary@domain.com <aniel_o'leary@domain.com> routing defer (-51): retry time not reached
Причина, по которой я начинаю с 20 в цикле, состоит в том, что все, что находится до 20-го поля, является просто стандартной информацией журнала, которая здесь не нужна для моих целей. Все, что мне нужно, это все от IP и выше для этого решения (сообщения для каждой ошибки 550 различны для каждого используемого почтового сервера. Я собираю список наиболее распространенных)