回车符引发的awk错误

回车符引发的awk错误
冷胜魁(Seaquester)
lengshengkui@gmail.com
2009-2-10
在使用awk处理一个可执行程序的输出时遇到了一个奇怪的问题。
这个程序将一个serial number(字符串)写到硬件,然后再读回来,输出到stdout。
通过awk可以将serial number分离出来,然后与写进去的值比较。总是失败,但是将值打印出来却是相同的。
假设写进去的serial number是 ABC1234567,十个字符。读回来时程序输出的格式是:Serial Number: ABC1234567
所以我就用下面的代码来分离出serial number:
serialno=`ipmitool rdsn | grep "Serial Number" | awk '{print $3}'`
然后作比较,示例代码如下:
#!/bin/sh
barcode="ABC1234567"
serialno=`ipmitool rdsn | grep "Serial Number" | awk '{print $3}'`
if [ $barcode == $serialno ] ; then
    echo "OK"
else
    echo "ERROR"
fi
但结果总是输出:ERROR。
百思不得其解,于是就加了echo将serialno输出。
我在输出serialno时用括号括起来,echo "serial number:($serialno)",终于发现了问题。
正确结果应该是:
serial number:(ABC1234567)
但实际结果是:
)erial number:(ABC1234567
于是我将输出结果输出到一个文件中,打开看到后面有一个‘/r’字符(ASCII码是0x0D)。问题就出在它上面了。
于是用tr来将 "/r" 去掉(用sed也是可以的)。
#!/bin/sh
barcode="ABC1234567"
serialno=`ipmitool rdsn | grep "Serial Number" | tr '/r' ' ' | awk '{print $3}'`
if [ $barcode == $serialno ] ; then
    echo "OK"
else
    echo "ERROR"
fi
终于得到了正确的结果!
awk并不将 "/r" 字符看作回车符,而是当成了字符串的一部分!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值