データセンター全体を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に慣れていないので、より良いオプションがあるかもしれません。