歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

awk之getline

awk之getline
    欲要了解getline,首先需要搞清楚$0,NR,FNR這幾個概念。
  所謂NR可以理解成Number of Record,或者說是行號,而FNR可以理解為Number of Record in File,或者成為文件內行號.聽起來沒啥區別。實際上如果你只有一個文件要awk處理,NR和FNR就是一回事,如下面所示,同一個文件bbs-list-3,對於每一行輸出的NR和FNR是相同的。
   manu@manu:~/code/shell/awk$ cat bbs-list-3   aardvark 555-5553 1200/300 B  alpo-net 555-3412 2400/1200/300 A  barfly 555-7685 1200/300 A  manu@manu:~/code/shell/awk$ awk '{printf "%-2d %-2d %s\n",NR,FNR,$0 }' bbs-list-3   1 1 aardvark 555-5553 1200/300 B  2 2 alpo-net 555-3412 2400/1200/300 A  3 3 barfly 555-7685 1200/300 A   但是如果你有多個文件要處理,情況就不同了。NR不管你是位於那個文件,每讀一行NR++,但是如果處理的文件發生了變化,FNR從1開始重新計數,如下圖所示:
 
 

 Effective awk programming中,給出了個表格,將awk的用法總結了如下:

 什麼意思呢,我們以幾個例子來講述getline的用法,以及解釋輸出為何是這樣:首先我們的基准文件是:
 

 1 getline
 我們看下上面的table,getline會將得到的下一條record賦給$0,同時NR,FNR都會++。
 

 2 getline var
 這個對應的是table的第二條,getline var,會將取到的下一條record賦值給 var,NR++,FNR++,而$0不發生任何的變化。
 看下圖,每次取到下一條record,賦值給tmp,而$0,從未發生變化,因為getline var 這種模式,從不改變$0.
 

 3 command | getline
 表格裡面顯示,會影響$0,將執行command的結果賦值給$0,復制我們可以用下面的例子展示下:
 

 4 command | getline var
 這個不多說了,會將command的輸出賦值給var,而$0保持不變。
 
Copyright © Linux教程網 All Rights Reserved