Bash Awk-v不';无法识别txt文件中的行
我试图用while循环中的变量替换字符串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 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"