我有一个我希望snmpget到文件中的IP列表。我在将输出写入文件时遇到问题。
OID=1.3.6.1.2.1.25.3.2.1.3.1
cat printers.csv | while read IP ; do
OUT=$(snmpget -v1 -c public $IP $OID)
printf '%s, %s\n' $IP $OUT >> printerNames.csv
done
我是printf命令的新手。我猜这是搞乱bc输出的地方写得不正确。此外,当没有响应它回到控制台,我想它写入输出文件。任何帮助将不胜感激。
答案 0 :(得分:1)
试试这个:
OID=1.3.6.1.2.1.25.3.2.1.3.1
while read IP ; do
OUT=$(snmpget -v1 -c public "$IP" "$OID") && printf '%s, %s\n' "$IP" "$OUT"
done < printers.csv 2>&1 > printerNames.csv
总是引用参数扩展是个好主意,除非你有充分的理由不这样做。重定向应用于while
循环。 read
将从输入文件中一次读取一行(不需要cat
);写入标准错误的任何内容都会复制到标准输出,标准输出(包括错误)将重定向到输出文件。仅当printf
命令成功时才执行snmpget
(如果查找失败,我假设它具有非零退出状态;可能不是这种情况)。
听起来printers.csv
有DOS行结尾(\r\n
)。回车符包含在每行的最后一个字符中。当您打印$IP
时,它会打印地址,然后打印回车,它会将光标移回到行的开头。这会导致行的其余部分(, $OUT
)覆盖该地址。要删除回车符,请通过dos2unix
运行输入文件,或使用其他方法将DOS行结尾转换为UNIX行结尾(仅\n
)。