将两个var打印到一个文件中

时间:2013-09-30 19:26:00

标签: linux bash printf snmp

我有一个我希望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输出的地方写得不正确。此外,当没有响应它回到控制台,我想它写入输出文件。任何帮助将不胜感激。

1 个答案:

答案 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)。