Я ищу сценарий, который может извлечь строку с самым высоким латентным ходом из traceroute. В идеале он будет смотреть на max или avg из 3 значений по строке. Как я могу так это?Сценарий для извлечения максимальной задержки из traceroute
Это то, что я пытался до сих пор:
traceroute www.google.com | awk '{printf "%s\t%s\n", $2, $3+$4+$5; }' | sort -rgk2 | head -n1
traceroute -w10 www.google.com | awk '{printf "%s\t%s\n", $2, ($3+$4+$5)/3; }' | sort -rgk2 | head -n1
Казалось шаг в правильном направлении, за исключением некоторых значений возвращавшихся из трассировки являются *, так как сумма и среднего обеспечить Неверное значение.
Update Got один шаг дальше:
traceroute www.cnn.com | awk '{count = 0;sum = 0;for (i=3; i<6; i++){ if ($i != "*") {sum += $i;count++;}}; printf "%s\t%s\t%s\t%s\n", $2, count, sum, sum/count }' | sort -rgk2
теперь нужно перехватить, если я не»есть столбец 4,5. Иногда трассировка только обеспечивает 3 звезды, как это:
17 207.88.13.153 235.649ms 234.864ms 239.316ms
18 * * *
Хм - вы делите на 3 во всех случаях, поэтому, если у меня 110,666 мс * 159,334 мс, я бы получил 90 мс, что не было бы точным средним из 135ms – stwissel
Я думаю, что проблема заключается в отсутствии определения для '*'. В своем комментарии вы решили проигнорировать его и разделите на два. Его также можно определить как 5,0 секунд, так как это время, в которое traceroute сдается и показывает астерикс. Его также можно определить как бесконечность, так как никакой ответ не был замечен. В последнем случае вы можете привести более чем к одной строке в качестве ответа наихудшего случая. – garethTheRed
Правда. * не определен. Он появляется, когда запрос истекает. Обычно это происходит, когда сервер настроен на игнорирование traceroute. Я проверил с таймаутом 30 секунд и все еще получил *. Поэтому я пришел к выводу, что игнорирование так же хорошо, как и предполагаемое значение (где тайм-аут - по умолчанию 3 сек.) Было бы подходящим) Awk все равно превращает его в ноль. Но наличие 2 значений и деление на 3 не дает полезного результата. – stwissel