मैं इसके साथ fping
और करूँगा awk
। दुर्भाग्य से, awk
's printf
डॉट्स के साथ पैड नहीं कर सकते, केवल के साथ रिक्त स्थान या शून्य तो मैं एक समारोह में लिखने के लिए है:
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
मैं कोष्ठकों में शून्य-गद्देदार 2-अंकीय संख्याओं का उपयोग कर रहा हूं, ताकि यदि 10-99 होस्ट $list
(100+ अभी भी इसे खराब कर दें) में प्रारूप खराब न हो । विकल्प एक जब तक छपाई देरी करने के लिए किया जाएगा END {}
ब्लॉक, और / regexp-मैचों के लिए / तीन सरणियों में से एक है, जैसे में करने के लिए सिर्फ डालने होस्ट नाम ok
, fail
, unknown
। या सिर्फ एक सहयोगी सरणी (जैसे hosts[hostname]="OK"
)। तब आप लाइनों की संख्या की गणना कर सकते हैं और यह तय करने के लिए उपयोग कर सकते हैं कि लाइन-काउंटर फ़ील्ड कितनी चौड़ी होनी चाहिए।
मैंने अज्ञात होस्ट ( CONNECTION IMPOSSIBLE
) और अगम्य मेजबानों ( CONNECTION FAIL
) के बीच आउटपुट को अलग-अलग रखने का निर्णय लिया है ।
sort -k3
वैकल्पिक है, यह सिर्फ समूहों द्वारा उत्पादन fping
परिणाम ( "होस्ट नाम जीवित है", "होस्ट नाम नहीं पहुंचा जा सकता है" या "होस्टनाम: नाम या पता नहीं चल सेवा")। बिना sort
, अज्ञात होस्ट हमेशा आउटपुट में पहले दिखाई देंगे। होस्टनाम के sort
बिना बस सादा -k3
होगा।
$TOTAL (length) - $MASHINE (length)
डॉट्स की संख्या प्राप्त करने के लिए। फिरprintf '.%.s' {1..$DOTS}
प्रत्येक लूप पुनरावृत्ति में उपयोग करें । ऐसा कुछ मुझे लगता है कि काम करेगा।