Bash Awk-v不';无法识别txt文件中的行

Bash Awk-v不';无法识别txt文件中的行,bash,shell,awk,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 < $f

我试图用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地址(文件的行)替换“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时 在shell中,我得到了预期的结果:

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

我认为这更简单、更有效:

while read line; do
    snmpwalk ... | sed "s/IF-MIB:/$line/" >> report.txt
done < "$filename"
读行时
;做
snmpwalk…|sed“s/IF-MIB://$line/”>>report.txt
完成<“$filename”

无需导出变量,除非
snmpwalk
明确要求该变量。通常,
export
的目的是使变量对子进程可见。如果在脚本中硬编码
replace
的值,会发生什么情况?(
awk-v text=“IF-MIB:”-v replace=“172.16.0.1”…
)或者从另一边看,如果您在while循环中
echo“$TEMP”
,您看到您期望的值了吗?另外,您能做一个
cat-t$filename
并告诉我们您看到了什么吗?文件是否有DOS(^M)行结尾?很高兴您解决了问题。今后,请查阅“询问问题代码前”中的前10个脚本问题。你在那张名单上名列第一。祝您好运。您的脚本中还存在其他一些常见问题(例如,读取前缺少
IFS=
、shell变量周围缺少引号、命令之间缺少
&&
、不必要的导出等等)。在这里潜伏一段时间,浏览bash常见问题解答。我尝试过,结果也一样。当我在命令行中(在我的脚本之外)执行此操作时,它会工作。但在我的脚本中,“$行”无法识别。。。我还尝试了一个env变量。如果我在“while”中“echo$line”,则会显示IP…请通过编辑您的问题来显示脚本的前几行。问题已由jas解决,问题出现在我使用的文件中,而不是脚本中。但是谢谢你给了我一个更简单、更轻松的方法,我在我的剧本中改变了你的台词
while read line; do
    snmpwalk ... | sed "s/IF-MIB:/$line/" >> report.txt
done < "$filename"