我正在尝试在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
我想用IP地址(文件行)替换“ IF-MIB:”,然后将内容添加到report.txt中,这是所有IP的结果。
我尝试了不同的解决方案,现在我将IP存储在一个env变量中,因为awk无法识别$ line。但是这种方法也不起作用
当我运行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
答案 0 :(得分:0)
我认为这更容易,更有效:
while read line; do
snmpwalk ... | sed "s/IF-MIB:/$line/" >> report.txt
done < "$filename"