Я пытаюсь заменить строку переменной внутри цикла while.
while read line; do
export TEMP=$line
snmpwalk -v 2c -c public $line 1.3.6.1.2.1.2.2.1.14 > temp.txt
awk -v text="IF-MIB:" -v replace="$TEMP" '{gsub(text,replace); print;}' temp.txt >> report.txt
done < $filename
Файл, который я использую, представляет собой список IP-адресов.Пример того, что находится в файле temp.txt:
IF-MIB::ifInErrors.1 = Counter32: 0
IF-MIB::ifInErrors.2 = Counter32: 4
IF-MIB::ifInErrors.3 = Counter32: 4
IF-MIB::ifInErrors.4 = Counter32: 3
Я хочу заменить «IF-MIB:» на IP-адрес (строку файла) и добавить содержимое в report.txt, который являетсярезультат всех IP-адресов.
Я пробовал разные решения, и сейчас я храню IP-адрес в переменной env, потому что awk не распознает строку $.Но этот подход тоже не работает
Когда я запускаю awk -v text="IF-MIB:" -v replace="$TEMP" '{gsub(text,replace); print;}' temp.txt >> report.txt
в оболочке, я получаю ожидаемый результат:
172.16.0.1:ifInErrors.1 = Counter32: 0
172.16.0.1:ifInErrors.2 = Counter32: 4
172.16.0.1:ifInErrors.3 = Counter32: 4
172.16.0.1:ifInErrors.4 = Counter32: 3
Когда я делаю ту же команду в моем скрипте, я получаю следующее:
:ifInErrors.1 = Counter32: 0
:ifInErrors.2 = Counter32: 4
:ifInErrors.3 = Counter32: 4
:ifInErrors.4 = Counter32: 3