Простой путь вперед - поместить выходные данные каждого вызова 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, поэтому может быть лучший вариант.
Не уверен, что полностью понимаю проблему. Что мешает вам использовать, например. grep
? Попробуйте
grep "An HTTP error occurred." path/to/logfile
и перенаправить результат в соответствующий файл.
Если вы знаете, что хотите видеть только эти три строки, запросите grep
их:
grep -E ": An HTTP error occurred\.\$|: Socket Timed out'\.\$|: Invalid Parameters'\.\$" input
Я немного закрепил тексты, заставив каждый из них начинаться с двоеточия -пробела (:
), а также заставив их быть в конце строки $
. Точка и $
экранированы, потому что я использовал двойные -кавычки вокруг параметра grep из-за одинарных -кавычек, появляющихся в тексте поиска.