frug: bash и парсинг текста

3 сообщения / 0 new
Последнее сообщение
Гость
frug: bash и парсинг текста

Хочу написать скрипт для проверки сетевых соединений.
И так, что я делаю... посылаю несколько пингов в хост, пинг возвращает мне целую кучу текста:

[color=green]
[root@gateway ~]# echo "$(ping www.yandex.ru -c 3)"
PING www.yandex.ru (213.180.204.11) 56(84) bytes of data.
64 bytes from yandex.ru (213.180.204.11): icmp_seq=0 ttl=47 time=92.0 ms
64 bytes from yandex.ru (213.180.204.11): icmp_seq=1 ttl=47 time=94.6 ms
64 bytes from yandex.ru (213.180.204.11): icmp_seq=2 ttl=47 time=90.8 ms

--- www.yandex.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 90.884/92.524/94.650/1.613 ms, pipe 2
[/color]

Как можно получить результаты из последних нескольких строк, и запихнуть их в переменные, для дальнейшей обработки, например сколько пакетов из скольки прошло, и временные характеристики ?

Goodvin
Не в сети
Зарегистрирован: 21/09/2010

Само простое - разобрать нужные строки с помощью grep, sed и awk.
Кода будет на несколько строчек всего.

P.S.
Сначала сделать вот так
echo "$(ping www.yandex.ru -c 3)" | tail -3
на выходе получим только итоговые строчки

а затем их уже разбирать скриптом.

Рекомендую книжицу "Advanced Bash Scripting".
Там все просто и доходчиво написано, есть примеры.
[ Редактирование 09.03.2006 - 16:03:44 ]

frug (не проверено)

[b]Goodvin[/b], спасибо за помощь
Advanced Bash scripting - действительно очень хорошее руководство
вот [url=http://gazette.linux.ru.net/rus/articles/index-abs-guide.html]ссылка[/url], кому нужно.
[url=http://www.opennet.ru/docs/sed_awk/sed_awk.html]вот[/url] краткое руковосдтво по sed и awk

А вот моя реализация задачи:

[blockquote]#!/bin/bash

# Test script
if [ -z "$1" ]
then
echo "Usage: test addr [ping count]";
echo "The IP address must be specified";
exit 1;
fi;

if [ -z "$2" ]
then
pkt_to_send=3;
else
pkt_to_send=$2;
fi;

ping_res=$(ping $1 -c $pkt_to_send | grep packets);
pkt_trans=$(echo $ping_res | awk '{ print $1 }');
pkt_recv=$(echo $ping_res | awk '{ print $4 }');
echo "Packets transmitted: $pkt_trans";
echo "Packets recived: $pkt_recv";
exit 0;[/blockquote]
<span class='smallblacktext'>[ Редактирование 28.03.2006 - 18:14:35 ]</span>

RSS-материал