Portál AbcLinuxu, 12. května 2025 07:01
Ahoj, po pul hodine hledani a zkoumani jak to funguje jsem si napsal tenhle malý skriptník na zjišťování pingu v čistém textu bez omáčky, ale řeším jak vypsat aritmetický průměř třeba z 5ti vrácencýh hodnot.
#!/bin/bash
PINGnet=`ping seznam.cz -c 5 | grep time= | awk '{print $8}' | sed 's/time=//'`
echo -n "$PINGnet"
Jde to vyřešit přes cyklus for, nebo se bude muset zavolat nějaká další funkce?
Řešení dotazu:
ping -c5 seznam.cz | tail -n1 | awk -F"/" '{print $5}'
tail
je také na tom seznamu, co je ve rouře s awk
a sed
navíc. Zhruba totéž s o 50% menším počtem procesů:
ping -c 5 -q seznam.cz | awk -F'/' '/^rtt min/{print($5)}'Variantně:
ping -c 5 -q seznam.cz | sed -ne 's#^\([^/]*/\)\{4\}\([^/]*\)/.*$#\2#p'
sed
, abych tam zamontoval ten tail
na poslední řádek, a pak jsem tam ten $
do adresy nedal:
ping -c 5 -q seznam.cz | sed -ne '$s#^\([^/]*/\)\{4\}\([^/]*\)/.*$#\2#p'Pokud chcete říznout poslední dvě čísla (ale nebude to správně zaokrouhlené, stačí minimální změna:
ping -c 5 -q seznam.cz | sed -ne '$s#^\([^/]*/\)\{4\}\([^/]*\)../.*$#\2#p'
grep
, awk
a sed
ve zřetězených rourách. Něco je špatně, protože to samé zvládne jenom awk
nebo jenom sed
na s jediným forkem a netřeba spouštět hromadu procesů.
Třeba to, co chcete vy:
... | sed -ne 's#^.* time=\([^ ]*\) ms$#\1#p'Nicméně zde bychom vymýšleli již vymyšlené, (linuxový) ping Vám na konci ve vrátí základní přehled, stačí si to vyzobnout z něj (Váš průměr tučně):
$ ping -c 5 -q pinged_host PING pinged_host (xxx.yyy.zzz.aaa) 56(84) bytes of data. --- pinged_host ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 0.794/2.886/7.991/2.763 ms
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.