0

我有一个 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 输出被错误地写入的地方。此外,当没有响应时,它会回显到控制台,我希望将其写入输出文件。任何帮助都感激不尽。

4

1 回答 1

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)。回车作为每行的最后一个字符包含在内。当您 print$IP时,它会打印地址,然后是回车,这会将光标移回行首。这会导致行 ( , $OUT) 的其余部分覆盖地址。要删除回车,请运行输入文件dos2unix,或使用其他方法将 DOS 行结尾转换为 UNIX 行结尾(\n单独)。

于 2013-09-30T19:55:36.057 回答