awk的奇怪行为

时间:2018-09-18 13:08:52

标签: awk

我遇到了awk的以下行为,这让我很困惑:

echo "" | awk '{print 15}'

输出

15

但是:

echo "" | awk '{print 015}'

输出

13

用013、0013、0105和0130替换015分别得到11、11、69和88。浮点数可以按预期工作,带有或不带有前导零。

我已经观察到GNU Awk版本3.1.7、4.0.2和4.1.3的这种行为。

有人能理解吗?

2 个答案:

答案 0 :(得分:2)

预期015被认为是八进制值。

echo "" | awk '{print 015}' ##Octal
13
echo "" | awk '{print 15}'  ##Decimal
15
echo "" | awk '{print 0x15}' ##Hex
21

编辑: 在这里https://www.gnu.org/software/gawk/manual/html_node/Nondecimal_002dnumbers.html

也添加了jas在评论中发布的漂亮链接

答案 1 :(得分:1)

提示:如果您想执行一些awk代码而不需要任何输入,请使用BEGIN块

awk 'BEGIN {
    print 015
    print 15
    print 0x15
}'
13
15
21