0

我有一个文本文件file.txt并具有以下上下文

3
7

我发现

awk 'BEGIN{while((getline i<"file.txt")>0){print i}}'
3
7
awk 'BEGIN{while((getline i<"file.txt")>0){print (i>10)}}'
1
1
awk 'BEGIN{while((getline i<"file.txt")>0){print (i>4)}}'
0
1
awk 'BEGIN{while((getline i<"file.txt")>0){print (i>8)}}'
0
0

为什么会出现这种奇怪的行为?

4

2 回答 2

0

如果可能,大多数实现(检查 gawk 和 mawk)将字段和行转换为数字。但也许你的不是为 getline 做的。在这种情况下:

这就是字符串比较的工作原理,“3”大于“10”:

awk 'BEGIN {print ("3">10)}'
1

尝试强制它是一个数字:

awk 'BEGIN {print (+"3">10)}'
0
awk 'BEGIN {print (+"11">10)}'
1
于 2013-07-20T18:32:05.930 回答
-1

4.1.0(Windows 版本) 对此进行了测试:

    $ cat file
    3
    7
    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>10)}}"
    0
    0

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>9)}}"
    0
    0

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>8)}}"
    0
    0

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>7)}}"
    0
    0

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>6)}}"
    0
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>5)}}"
    0
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>4)}}"
    0
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>3)}}"
    0
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>2)}}"
    1
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>1)}}"
    1
    1

    $ awk "BEGIN{while((getline i<\"file\")>0){print (i>0)}}"
    1
    1

正常行为。

于 2013-07-20T18:07:18.217 回答