Ben fping
ve ile yapardım awk
. Ne yazık ki, awk
' printf
noktalar ile pad, sadece boşluk veya sıfır ile bu yüzden bir işlev yazmak zorunda:
list=(kali surya indra ganesh durga hanuman nonexistent)
fping "${list[@]}" 2>&1 |
sort -k3 |
awk -F'[: ]' 'BEGIN { fmt="(%02d) %s CONNECTION %s\n"};
function dotpad(s,maxlen, l,c,pads) {
l = maxlen - length(s);
pads = "";
for (c=0;c<l;c++) {pads=pads"."};
return s " " pads
};
/alive$/ { printf fmt, ++i, dotpad($1,19), "OK" };
/unreachable$/ { printf fmt, ++i, dotpad($1,19), "FAIL" }
/not known$/ { printf fmt, ++i, dotpad($1,19), "IMPOSSIBLE" } '
(01) durga .............. CONNECTION OK
(02) ganesh ............. CONNECTION OK
(03) indra .............. CONNECTION OK
(04) kali ............... CONNECTION OK
(05) nonexistent ........ CONNECTION IMPOSSIBLE
(06) hanuman ............ CONNECTION FAIL
(07) surya .............. CONNECTION FAIL
Parantez içinde sıfır dolgulu 2 basamaklı sayılar kullanıyorum, böylece 10-99 ana bilgisayar $list
(100+ yine de vidalayacak) varsa biçim vidalanmıyor . Alternatif, yazdırmayı bir END {}
bloğa kadar ertelemek ve / regexp-match / ana makine adını üç diziden birine, örneğin ok
, eklemek fail
gibi unknown
. veya yalnızca bir ilişkilendirilebilir dizi (ör. hosts[hostname]="OK"
). Daha sonra satır sayısını sayabilir ve bunu, satır sayacı alanının ne kadar geniş olması gerektiğine karar vermek için kullanabilirsiniz.
Ayrıca çıktı bilinmeyen ana bilgisayarlar ( CONNECTION IMPOSSIBLE
) ve ulaşılamaz ana bilgisayarlar ( ) arasında ayrım yapmaya karar verdim CONNECTION FAIL
.
Bu sort -k3
isteğe bağlıdır, yalnızca fping
sonucu sonuca göre gruplandırır ("ana makine adı canlı", "ana makine adına erişilemiyor" veya "ana makine adı: Adı veya hizmeti bilinmiyor"). Olmadan, sort
bilinmeyen ana bilgisayarlar her zaman çıktıda ilk görünür. Ana bilgisayar adına göre irade sort
olmadan sadece düz -k3
.
$TOTAL (length) - $MASHINE (length)
Nokta sayısını elde etmek için bir hesaplama yapabilirsiniz . Sonraprintf '.%.s' {1..$DOTS}
her döngü yinelemesinde kullanın . Böyle bir şey işe yarayacağını düşünüyorum.