Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1453178
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2010-01-04 10:24:16

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" }' 打印出一个单引号
阅读(1124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~