使用getline时出现奇怪的awk打印结果

时间:2013-07-20 17:52:22

标签: awk

我有一个文本文件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

为什么这种奇怪的行为?

2 个答案:

答案 0 :(得分:0)

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

字符串比较是如何工作的,&#34; 3&#34;大于&#34; 10&#34;:

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

尝试强制它成为一个数字:

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

答案 1 :(得分:-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

正常行为。