전체 데이터 센터를 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에 익숙하지 않지만 질문(및 이전의 비효과적인 답변)을 보면 몇 줄의 출력이 생성되는 것으로 보입니다. 내가 보기에 스크립트 결과의 대부분은 반복적이거나 중복되는 것 같습니다. 즉, 항상 다음 형식의 두 줄이 있습니다.
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;
}
}
잘라내어 붙여넣을 수 있는 한 줄의 경우는 다음과 같습니다.
| awk 'BEGIN{FS=","}{if ( ($1,$2) in A ) {print A[$1,$2] "," $3;} else {A[$1,$2]=$1 "," $2 "," $3;}}'
이것이 도움이 됩니까?