Awk -v не распознает строку в текстовом файле - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь заменить строку переменной внутри цикла 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

1 Ответ

0 голосов
/ 26 сентября 2019

Я думаю, что это проще и эффективнее:

while read line; do
    snmpwalk ... | sed "s/IF-MIB:/$line/" >> report.txt
done < "$filename"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...