Фильтровать вывод traceroute
Мне нужна помощь о том, как фильтровать данные, возвращаемые трассировкой.
Введение Я запускаю скрипт bash, который проверяет IP-адрес, возвращаемый этой командой:
IP=`traceroute -m 2 www.test.com | awk -vOFS='\t' '{if (NR==3){print $2}}'`
echo "$IP: `date`"
Основываясь на значении "$IP", я выполняю команду "ожидать", чтобы изменить параметр внутри переключателя.
Сценарий bash планируется через корневой crontab.
Описание проблемы crontab, выполняющий этот bash-скрипт, генерирует такой журнал
192.168.3.25: vie dic 14 14:10:23 CET 2012
192.168.3.25: vie dic 14 14:20:12 CET 2012
192.168.3.25: vie dic 14 14:30:11 CET 2012
192.168.3.25: vie dic 14 14:40:11 CET 2012
192.168.3.25: vie dic 14 14:50:11 CET 2012
expect /root/Scripts/delete.exp
192.168.3.111: vie dic 14 15:00:11 CET 2012
*: vie dic 14 15:10:11 CET 2012
*: vie dic 14 15:20:16 CET 2012
Как вы можете заметить, после выполнения ожидаемого сценария возникает проблема, и строка traceroute начинает возвращать "*" вместо правильного IP (192.168.3.25). Я думаю, что по какой-то причине после внесения изменений в коммутатор, и в течение примерно 20 минут, traceroute возвращает на одну строку меньше (первая строка, показывающая IP-адрес коммутатора, отсутствует).
Я протестировал значение, возвращаемое для traceroute, несколькими способами, и я думаю, что следует избегать использования awk для фильтрации значений, возвращаемых из traceroute. Это потому, что, насколько я знаю, с помощью awk я могу просто использовать "NR" для фильтрации строки. Итак, я не знаю, как я мог отфильтровать эти значения для поиска определенного (например, один конкретный IP).
Спасибо за помощь.
1 ответ
Проблема исправлена. Я только что изменил команду traceroute, добавив "| grep IP_to_filter"