2017-02-23 42 views
1

Я хочу выполнить ping destination_ip и перенаправить счетчик последовательных потерь пакетов в файл ping_result.txt. Предположим, что результат пинг подобен следующее:bash скрипт подсчет последовательных потерь пакетов

reply from destination_ip 
request timed out 
request timed out 
reply from destination_ip 
request timed out 
request timed out 
request timed out 
request timed out 
reply from destination_ip 

выход должен быть как следующее:

0 
1 
2 
0 
1 
2 
3 
4 
0 
+1

В будущем было бы неплохо увидеть код, который вы попытались, а не просто заставить кого-то сделать домашнее задание для вас. –

ответ

3

В AWK:

... | awk '/reply/{count = 0} {print count++}' > ping_result.txt 

По существу:

  • Сброс count, если был получен ответ.
  • Распечатать count и увеличить его.
+0

Спасибо муру за красивую консультацию и использование awk – aschkant

2

даже близко не так красиво, как muru's ответ, но для кого-то, кто не совсем, как выветривание, используя AWK это то, что я хотел бы сделать:

Это при условии, вы время подсчета подряд выход потери пакетов сохраняется в файл - output.txt.

COUNT=0 
while read line; do 
    if [[ $line == "reply"* ]] 
     then ((COUNT=0)) 
    else ((COUNT++)) 
    fi 
    echo $COUNT 
done <output.txt> ping_result.txt 

Таким образом, он перемещается по файлу, находя любую строку, которая начинается с ответа и установки, которые считаются равными нулю в противном случае.

Я только что прочитал Why is using a shell loop to process text considered bad practice?. Так что это, вероятно, не самая лучшая идея.

+0

Спасибо Фубару. На самом деле я ожидал такого программирования. Однако совет Муру был отличным ярлыком;) – aschkant

Смежные вопросы