首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止awk将以0开头的字符串转换为oct

防止awk将以0开头的字符串转换为oct
EN

Stack Overflow用户
提问于 2017-03-07 14:01:33
回答 3查看 240关注 0票数 0

这一次花了我一晚上的时间。

假设您有一个文件a_file.txt,如下所示。

代码语言:javascript
复制
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

如果你跑

代码语言:javascript
复制
awk '{if($1==4677){print $0;}}' a_file.txt

你得到了你所期望的:

代码语言:javascript
复制
4677    JUC_DDDD1   6
4677    JUC_DDDD2   7

但是,如果你跑

代码语言:javascript
复制
awk '{if($1==04677){print $0;}}' a_file.txt

你可能会惊讶于

代码语言:javascript
复制
2495    JUC_BBBB1   3
2495    JUC_BBBB2   4

似乎发生的事情是,awk将04677解释为2495的八进制表示,并与它一起运行。

两个问题:

  1. 我对结果的解释正确吗?
  2. 有没有办法阻止awk解释以0开头的八进制数,而使用它们的十进制解释?
  3. gawk是否有同样的行为,是否有可能改变它?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-07 14:06:48

  1. 以前导零开头的数字是awk中的awk数。2495是八进制数4677的十进制值。
  2. 除了0本身之外,没有以0开头的十进制数。
  3. 是的而且不会变。

顺便说一下,思想上的版本

代码语言:javascript
复制
awk '{if($1==4677){print $0;}}' file

代码语言:javascript
复制
awk '$1==4677' file
票数 3
EN

Stack Overflow用户

发布于 2017-03-07 14:08:44

我可以提出两个选择,你可以用引用你想要的键来做字符串匹配,这样"04677“就不匹配了。

代码语言:javascript
复制
$ awk '$1=="04677"' file

或者,如果您知道您的键是数字的,则可以添加零以转换为十进制。

代码语言:javascript
复制
$ awk '$1==04677+0' file
票数 3
EN

Stack Overflow用户

发布于 2017-03-07 16:44:02

当你写$1==04677而不是$1==4677时,告诉 awk将04677作为一个八进制数来处理,就像你写$1==0x4677时,你会告诉awk把它当作十六进制,而对于$1==4677"",你会告诉awk把它当作字符串对待。如果你不想那样做,那就别那么做。

更新: wrt您在@karakfa's answer下所作的评论

这个问题源于在脚本中运行awk,其中键04677是字符串,但是文件有一个数字第一列(没有前导零)。"04677“选项不能工作,因为文件上的字符串不包含前面的0。我原以为如果我把它放在数字里,这不会有什么关系,但是八进制转换让我措手不及。我相信04677+0选项在这种情况下会很好。

您刚才在评论中描述的是一个与您在问题中所述的完全不同的问题。现在,您不再将十进制与八进制进行比较,而是将数字与字符串进行比较,在这种情况下使用的操作是字符串比较(参见https://www.gnu.org/software/gawk/manual/gawk.html#Typing-and-Comparison),因此4677 != "04677",因为4677的第一个字符是"4",而04677的第一个字符是"0"。它与数字的八进制表示没有任何关系。是的,使用"04677"+0可以工作,因为这会将字符串转换为数字(4677),因此您将得到一个数字,而不是字符串,比较。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42650311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档