0

を使用して確認したい IP のリストを含む txt があり、fpingIP を名前に変換します。

私のファイル ( hosts.txt) は次のようになります。

192.168.1.1 サーバー A
192.168.1.2 サーバー B
192.168.1.3 サーバー C

これは私が書いたスクリプトです:

#! /bin/bash
N_Hosts=$(wc hosts.txt | awk {'print $1'})

typeset Nodos[$N_Hosts]

i=0;  
while read line  
do  
 Nodos[$i]=$(echo $line | awk {'print $1'})  
 i=$i+1  
done < hosts.txt

comando="fping "
comandoCompleto=$comando${Nodos[*]}

$comandoCompleto | sed 's/is alive/OK/g' | sed 's/is unreachable/down/g'

その出力は次のようになります。

192.168.1.1 OK
192.168.1.2 ダウン
192.168.1.3 OK

そして、私はそれが欲しい:

serverA OK
serverB ダウン
serverC OK

またはを使用して出力を変更することは可能ですsedawk?

4

4 に答える 4

3

hosts.txt と output.txt (スクリプトからの出力) の 2 つのファイルがある場合は、次のことができます。

awk 'NR==FNR{a[$1]=$2;next}{$1=a[$1]}1' hosts.txt output.txt
于 2013-06-18T16:26:43.143 に答える
1

GNU シード

sed -r 's#(\S+)\s+(\S+)#/\1/s/(\\S+)\\s+(\\S+)/\2 \\2/#' hosts.txt|sed -rf - output.txt

..出力:

サーバーA OK
サーバーBのダウン
サーバーC OK
于 2013-06-18T18:11:22.010 に答える
0

必要なのは次のとおりです。

while read ip name
do
    fping "$ip" |
    awk -v n="$name" '{print n, (/alive/?"OK":"down")}'
done < hosts.txt
于 2013-06-18T17:53:08.790 に答える