Awk -v无法识别txt文件中的行

时间:2019-09-26 08:42:38

标签: bash shell awk

我正在尝试在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

1 个答案:

答案 0 :(得分:0)

我认为这更容易,更有效:

while read line; do
    snmpwalk ... | sed "s/IF-MIB:/$line/" >> report.txt
done < "$filename"