csv出力の配列として使用されるforループの変数

csv出力の配列として使用されるforループの変数

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

おすすめ記事