gawk中的字符串数字(STRNUM)介绍

几天前在论坛看到一个帖子 http://bbs.chinaunix.net/thread-4184581-1-1.html 这是个挺有意思的问题。
我自己做了几个试验,发现00e1有这个问题,但是00a1、00b1、00c1等其它字符串却没有这个问题。

前天,怀着忐忑的心情给 bug-gawk@gnu.org 发了一封邮件:

[bug report] gawk doesn’t work correctly when assign special value to variable
To: bug-gawk@gnu.org

1. Symptom:
gawk doesn’s work correctly when assign special value (like 00e1) variable.

2. Steps to repeat this issue:

1) Download and compile the latest gawk 4.1.3
http://ftp.gnu.org/gnu/gawk/
[root]# gawk --version | head -2
GNU Awk 4.1.3, API: 1.1
Copyright (C) 1989, 1991-2015 Free Software Foundation.

2) Prepare a test file
cat > 1.txt << EOF
00e1 00e1
00e2 00e4
00e3 00e1_01
EOF

3) Execute following command to see the result
[root]# gawk -v var="00e1" '$2==var' 1.txt
00e1 00e1
00e2 00e4

The second line should not be there. Because "00e4" is NOT equal to "00e1" obviously.
Is it a bug or by design?

3. Workaround:
gawk -v var="00e1" '$2==""var' 1.txt
gawk -v var="^00e1___FCKpd___0quot; '$2~var' 1.txt

没想到,昨天就收到了来自 Andrew J. Schorr 大神的回复,效率还真是高呢,32个赞:

On Thu, Aug 06, 2015 at 03:55:50PM +0800, Shell_HAT wrote:
> The second line should not be there. Because "00e4" is NOT equal to "00e1" obviously.
> Is it a bug or by design?

This is a tricky area. Please check the manual for the discussion of "String Type versus Numeric Type":
http://www.gnu.org/software/gawk/manual/html_node/Variable-Typing.html

I think the command-line assignment results in a variable of type STRNUM.

> 3. Workaround:
> gawk -v var="00e1" '$2==""var' 1.txt
> gawk -v var="^00e1___FCKpd___1quot; '$2~var' 1.txt

These examples may also be helpful:

bash-4.2$ gawk 'BEGIN {var = "00e1"} $2 == var' 1.txt
00e1 00e1
bash-4.2$ gawk 'BEGIN {var = 00e1} $2 == var' 1.txt
00e1 00e1
00e2 00e4

Regards,
Andy

看完那篇文档,似有所悟。但是还是没搞清楚为啥00a1、00b1、00c1等字符串没问题呢?
喝完一杯咖啡之后,恍然大悟:科学计数法!泥煤的~~~

(0)

相关推荐

  • excel如何限制单元格中只能输入数字?

    日常工作中,excel是最常用来处理数据的工具,有时候在某一列或行中,只能输入数字,如何进行数据编辑上的限制呢?下面小编就为大家详细介绍一下,来看看吧! 步骤 1.打开要编辑的excel工作表,图中表 ...

  • Unix 操作系统中处理字符串问题的简单方式

    在Unix操作系统中,说实话其字符串的处理功能实在不强。如没有现成的length(获取字符串的长度)等函数。要实现对字符串的操作,往往需要采用 expr命令结合相关的通配符来实现一些特定的功能。虽然在 ...

  • Excel表格中的字符串格式有误如何处理

    我们在进行Excel表格编辑数据的时候,发现其中的字符串格式有误,该怎么处理呢?今天就跟大家介绍一下Excel表格中的字符串格式有误的具体解决方法.1. 删除空格:如图,我们在打开的表格中,可以看到字 ...

  • Excel中把普通数字自动转换成中文大写数字的方法(图文教程)

    平时工作中输入金额时常常需要转成中文大写数字,但输入起来比较麻烦,那么是否可以将数字直接转换成中文大写呢?本教程中就为大家介绍在excel中如何将数字自动转换成中文大写数字。 第一步:打开Excel工 ...

  • Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,大家参考使用吧 如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1 ...

  • 在word中全角数字怎么替换成半角数字?

    在word中全角数字怎么替换成半角数字?有些人分不清全角和半角,但是如果你输入数字的话,两者之间明显不同,那在word中全角数字替换为半角数字,怎么弄呢?下面就为大家详细介绍一下,来看看吧! 步骤 打 ...

  • 如何在EXCEL单元格中输入一个数字自动变成几个相同的数字

    最近有电脑用户反映怎么在EXCEL单元格中输入一个数字自动变成几个相同的数字,比如输入1自动变成6个1,该如何解决呢?下面脚本之家小编为大家带来解决这个问题的教程,需要的朋友们快来借鉴一下吧. 实现是 ...

  • excel中如何把数字变成大写

    平时工作中输入金额时常常需要转成中文大写数字,但输入起来比较麻烦,那么是否可以将数字直接转换成中文大写呢?本教程中就为大家介绍在excel中如何将数字自动转换成中文大写数字. 第一步:打开Excel工 ...

  • Word如何将文本中所有的数字都去掉

    本例主要介绍利用替换的方法把Word文本中所有的数字都去掉,操作很简单,很适合新手来学习,推荐过来,一起来学习吧. 操作步骤说明: Word文本正文中数字和文本掺杂,需要将其中的所有数字去掉. 按键盘 ...