2013-07-20 52 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