【发布时间】:2017-03-08 00:58:01
【问题描述】:
这个让我睡了一晚。
假设你有一个文件 a_file.txt 如下。
1000 JUC_0000 1
2494 JUC_AAAA 2
2495 JUC_BBBB1 3
2495 JUC_BBBB2 4
4676 JUC_CCCC 5
4677 JUC_DDDD1 6
4677 JUC_DDDD2 7
如果你跑
awk '{if($1==4677){print $0;}}' a_file.txt
你会得到你所期望的:
4677 JUC_DDDD1 6
4677 JUC_DDDD2 7
但是,如果你运行
awk '{if($1==04677){print $0;}}' a_file.txt
你可能(我)很惊讶
2495 JUC_BBBB1 3
2495 JUC_BBBB2 4
似乎发生的事情是 awk 将 04677 解释为 2495 的八进制表示并使用它运行。
两个问题:
- 我对结果的解释是否正确?
- 有没有办法防止 awk 将以 0 开头的数字解释为八进制数,而改用十进制解释?
- gawk 是否具有相同的行为,是否可以更改?
【问题讨论】:
-
Is my interpretation of the result correct?是的,你的解释是正确的 -
(2)只有我能想到$1==int("04677")...... -
Does gawk have the same behaviour是...is it possible to change it?不知道 -
(2) $1=="04677" -
何塞:谢谢。 int 转换应该可以工作。