1. 程式人生 > >記用AWK進行for迴圈查詢文字時候的問題

記用AWK進行for迴圈查詢文字時候的問題

今天剛剛接觸awk,就想著來實驗一下,當學到for迴圈的時候,我就簡單的操作了一下

1.txt 文字如下

1 haha  heihei  houhou
2 yannie2 yannie3 yannie4
3 hilary2 hilary3 hilary4
4 czl2 czl3 czl4
5 wo2 shi3 ni4

當用按以下方法寫能輸出

awk '{ for(i = 0;i<5;i++) print $i }' 1.txt

輸出結果為:

1 haha  heihei  houhou
1
haha
heihei
houhou
2 yannie2 yannie3 yannie4
2
yannie2
yannie3
yannie4
3 hilary2 hilary3 hilary4
3
hilary2
hilary3
hilary4
4 czl2 czl3 czl4
4
czl2
czl3
czl4
5 wo2 shi3 ni4
5
wo2
shi3
ni4

即先輸出$0,即當前行文字內容 然後輸出$1 這一行第一列的內容,以此類推,輸出沒有問題,由於其預設以空格為分隔符,要想設定以回車為分隔符的話,可以用-F選項 -F"\n"

但是其實我寫的時候第一次是有錯誤的
我第一次寫的如下:

awk 'BEGIN{ for(i = 0;i<5;i++) print $i }' 1.txt

awk 'BEGIN{ for(i = 0;i<5;i++)} {print $i }' 1.txt

它輸出了5行空行

這樣寫

wk 'BEGIN{ for(i = 0;i<5;i++)} END{print $i }' 1.txt

它輸出了一行空行

那這到底是為什麼呢???

因為在awk的BEGIN中其進行的是初始化,在這一步中,已經將i初始化為4,也就是最後一行的最後一個空列,也就是回車符,所以就失敗了~~

你可以試著將前面不能輸出awk語句中i的最大值改小一點,就會發現輸出內容了,不過當然與我們的初衷向背馳啦~

所以說還是要細心啦!!!