2013-07-20 54 views
0

时,我有一个文本文件file.txt并具有以下方面奇怪awk的打印结果使用函数getline

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 

为什么这种奇怪的行为?

+0

奇怪行为> 10的结果,这应该与> 8结果相同(并且在我的系统上)。否则,awk会评估i是否大于给定值并返回True或False。 – Ursula

+0

既然你发布了一个getline循环来演示这个问题,我们可以假设,如果你让awk正常处理输入(即没有getline),你没有看到这个问题?换句话说,'awk'$ 0> 10''等产生了与上面相同的结果还是不同的结果?我强烈怀疑你刚刚在Windows上创建了你的文件,并且在每行末尾都有control-Ms,或者在文件中有一些其他类型的控制字符,这会导致awk将输入视为字符串,并且整个getline事件是一个红色鲱鱼。 –

+1

在您的输入文件上运行'cat -v file'并更新您的问题和结果,以便我们可以确切地看到它的内容。另外,在你的代码中将'print i'更改为'printf'<%s> \ n“,i',并用此结果更新你的问题。 –

回答

-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 

正常行为。

0

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

这是字符串比较是如何工作的,“3”是不是“10”更大:

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

试图迫使它是一个数字:

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

那么,为什么awk在提问者的系统上使用字符串比较以及我的数字和第一个人的回答呢?教我如你所表明的那样明确,以获得可靠的结果。 – Ursula

+0

它也适用于我的'awk'。 @learning:你用什么awk? '+'能解决问题吗? –

+0

您的答案是_off topic_,在OP的问题中没有字符串可以发现。 – captcha