awk之getline

來源:互聯網
上載者:User

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保持不變。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.