データセンター全体をcat6からcat6aに再接続する必要があるため、結果をカンマ区切りの列に整理することを目的としてソリューションを見つけようとしました。
$DBFILEの出力はaccess1a access1b ...です。
ターゲット:
switch,switch-port,server,server-port
access1a,1,server6,eth0
access1a,2,server4,eth0
access1a,3,server1,eth0
私の現在の出力は次のとおりです。
#!/bin/sh
DBFILE=$(cat /tmp/routers.all | awk -F: '{print $1}'| grep access)
for OUTPUT in $DBFILE
do
/usr/bin/snmpwalk -Os -c pass -v 2c $OUTPUT iso.0.8802.1.1.2.1.4.1.1.8.0 | tr -d "\"" | sed -r 's/ /./g' |awk -F. '{print "'"$OUTPUT"'"","$13","$22","}'
/usr/bin/snmpwalk -Os -c pass -v 2c $OUTPUT iso.0.8802.1.1.2.1.4.1.1.9.0 | tr -d "\"" | sed -r 's/ /./g' |awk -F. '{print "'"$OUTPUT"'"","$13","$17","}'
done
access1a,1,server6,
access1a,2,server4,
access1a,3,server1,
access1a,1,eth0,
access1a,2,eth0,
access1a,3,eth0,
私はさまざまな配列とforループのバリエーションを試しましたが、最後のクエリだけを取得したり、まったく動作しません。私は私が次のことをする方法を見つけることができないようだと尋ねると思いました。
答え1
単純な転送パスは、各呼び出しの出力をsnmpwalk
変数に入れてから、次のようawk
にいくつかのフィルタリングにリンクすることです。
#!/bin/sh
DBFILE=$(cat /tmp/routers.all | awk -F: '{print $1}'| grep access)
for OUTPUT in $DBFILE do
FIRST_HALF=`/usr/bin/snmpwalk -Os -c pass -v 2c $OUTPUT iso.0.8802.1.1.2.1.4.1.1.8.0 | tr -d "\"" | sed -r 's/ /./g' |awk -F. '{print "'"$OUTPUT"'"","$13","$22","}'`
SECOND_HALF=`/usr/bin/snmpwalk -Os -c pass -v 2c $OUTPUT iso.0.8802.1.1.2.1.4.1.1.9.0 | tr -d "\"" | sed -r 's/ /./g' |awk -F. '{print "'"$OUTPUT"'"","$13","$17","}' |awk 'BEGIN{FS=","}{print($3)}'`
echo ${FIRST_HALF}${SECOND_HALF}
done
私はこれが結果だと思います。
access1a,1,server6,eth0
access1a,2,server4,eth0
access1a,3,server1,eth0
これは役に立ちますか?
公開:私はsnmpwalkに慣れていないので、より良いオプションがあるかもしれません。
答え2
私はsnmpwalkに慣れていませんが、質問(および以前の非効果的な答え)を見ると、数行の出力が生成されるようです。私が見ると、スクリプトの結果のほとんどは反復的または重複しているようです。つまり、常に次の形式の2行があります。
A,B,C
...
A,B,D
線の半分が次のように見える別の出力が必要です。
A,B,C,D
この場合、スクリプトをそのままにして、出力を次のAWKスクリプトにパイプする方が簡単になります。
BEGIN{
FS=",";
}
{
if ( ($1,$2) in A ) {
print A[$1,$2] "," $3;
} else {
A[$1,$2]=$1 "," $2 "," $3;
}
}
カットして貼り付けることができる1行の場合は、次のようになります。
| awk 'BEGIN{FS=","}{if ( ($1,$2) in A ) {print A[$1,$2] "," $3;} else {A[$1,$2]=$1 "," $2 "," $3;}}'
これは役に立ちますか?