awk中处理八进制, 有点意思。 请看:
# echo "" | awk '{ print 012 }'
10
# echo "" | awk '{ print 090 }'
90
大概看出点端倪来了吧。 当一个数字常量以0开头, 且底数范围在0-7之间, awk会把它当作八进制来进行计算。 而当一个数字常量虽然以0开头, 但是它的底数中任一个超出了0-7的范围, awk会把他当作十进制来处理, 开头的0去掉。
# echo "" | awk '{ printf "%d\n", 012 - 019}'
-9
另外, expr在计算的时候, 也会跟做自动处理, 比如:
# expr 08 + 09
17
但是bash里的let和$(()), 在处理八进制的时候, 就会严格按照八进制常量的定义规则, 否则就会报错:
# let a=08
-bash: let: a=08: value too great for base (error token is "08")
# $(( 08 ))
-bash: 08: value too great for base (error token is "08")
2010-03-22更新:
在awk中要打印八进制对应的可见字符, 在八进制数两边加上双引号, 还有一个反斜线即可, 如:
awk 'BEGIN{ print "\047" }' 打印出一个单引号
阅读(1176) | 评论(0) | 转发(0) |