成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

awk系列:如何使用awk的特殊模式 BEGIN 和 END

開源 系統(tǒng)運維
我們將學習更多的 awk 功能,即 awk 的特殊模式:BEGIN 和 END。隨著我們逐漸展開,并探索出更多構(gòu)建復雜 awk 操作的方法,將會證明 awk 的這些特殊功能的是多么強大。

在 awk 系列的第八節(jié),我們介紹了一些強大的 awk 命令功能,它們是變量、數(shù)字表達式和賦值運算符。

本節(jié)我們將學習更多的 awk 功能,即 awk 的特殊模式:BEGIN 和 END。

隨著我們逐漸展開,并探索出更多構(gòu)建復雜 awk 操作的方法,將會證明 awk 的這些特殊功能的是多么強大。

開始前,先讓我們回顧一下 awk 系列的介紹,記得當我們開始這個系列時,我就指出 awk 指令的通用語法是這樣的:

  1. # awk 'script' filenames 

在上述語法中,awk 腳本擁有這樣的形式:

  1. /pattern/ { actions } 

你通常會發(fā)現(xiàn)腳本中的模式(/pattern/)是一個正則表達式,此外,你也可以在這里用特殊模式 BEGIN 和 END。因此,我們也能按照下面的形式編寫一條 awk 命令:

  1. awk ' 
  2. BEGIN { actions }  
  3. /pattern/ { actions } 
  4. /pattern/ { actions } 
  5. ………. 
  6. END { actions }  
  7. ' filenames   

假如你在 awk 腳本中使用了特殊模式:BEGIN 和 END,以下則是它們對應的含義:

  • BEGIN 模式:是指 awk 將在讀取任何輸入行之前立即執(zhí)行 BEGIN 中指定的動作。
  • END 模式:是指 awk 將在它正式退出前執(zhí)行 END 中指定的動作。

含有這些特殊模式的 awk 命令腳本的執(zhí)行流程如下:

  1. 當在腳本中使用了 BEGIN 模式,則 BEGIN 中所有的動作都會在讀取任何輸入行之前執(zhí)行。
  2. 然后,讀入一個輸入行并解析成不同的段。
  3. 接下來,每一條指定的非特殊模式都會和輸入行進行比較匹配,當匹配成功后,就會執(zhí)行模式對應的動作。對所有你指定的模式重復此執(zhí)行該步驟。
  4. 再接下來,對于所有輸入行重復執(zhí)行步驟 2 和 步驟 3。
  5. 當讀取并處理完所有輸入行后,假如你指定了 END 模式,那么將會執(zhí)行相應的動作。

當你使用特殊模式時,想要在 awk 操作中獲得***的結(jié)果,你應當記住上面的執(zhí)行順序。

為了便于理解,讓我們使用第八節(jié)的例子進行演示,那個例子是關(guān)于 Tecmint 擁有的域名列表,并保存在一個叫做 domains.txt 的文件中。

  1. news.tecmint.com 
  2. tecmint.com 
  3. linuxsay.com 
  4. windows.tecmint.com 
  5. tecmint.com 
  6. news.tecmint.com 
  7. tecmint.com 
  8. linuxsay.com 
  9. tecmint.com 
  10. news.tecmint.com 
  11. tecmint.com 
  12. linuxsay.com 
  13. windows.tecmint.com 
  14. tecmint.com 
  1. $ cat ~/domains.txt 

 

查看文件內(nèi)容在這個例子中,我們希望統(tǒng)計出 domains.txt 文件中域名 tecmint.com 出現(xiàn)的次數(shù)。所以,我們編寫了一個簡單的 shell 腳本幫助我們完成任務,它使用了變量、數(shù)學表達式和賦值運算符的思想,腳本內(nèi)容如下:

  1. #!/bin/bash 
  2. for file in $@; do 
  3. if [ -f $file ] ; then 
  4. ### 輸出文件名 
  5. echo "File is: $file" 
  6. ### 輸出一個遞增的數(shù)字記錄包含 tecmint.com 的行數(shù) 
  7. awk '/^tecmint.com/ { counter+=1 ; printf "%s\n", counter ; }' $file 
  8. else 
  9. ### 若輸入不是文件,則輸出錯誤信息 
  10. echo "$file 不是一個文件,請指定一個文件。" >&2 && exit 1 
  11. fi 
  12. done 
  13. ### 成功執(zhí)行后使用退出代碼 0 終止腳本 
  14. exit 0 

現(xiàn)在讓我們像下面這樣在上述腳本的 awk 命令中應用這兩個特殊模式:BEGIN 和 END:

我們應當把腳本:

  1. awk '/^tecmint.com/ { counter+=1 ; printf "%s\n", counter ; }' $file 

改成:

  1. awk ' BEGIN {  print "文件中出現(xiàn) tecmint.com 的次數(shù)是:" ; } 
  2. /^tecmint.com/ {  counter+=1  ;  } 
  3. END {  printf "%s\n",  counter  ; }  
  4. '  $file 

在修改了 awk 命令之后,現(xiàn)在完整的 shell 腳本就像下面這樣:

  1. #!/bin/bash 
  2. for file in $@; do 
  3. if [ -f $file ] ; then 
  4. ### 輸出文件名 
  5. echo "File is: $file" 
  6. ### 輸出文件中 tecmint.com 出現(xiàn)的總次數(shù) 
  7. awk ' BEGIN {  print "文件中出現(xiàn) tecmint.com 的次數(shù)是:" ; } 
  8. /^tecmint.com/ {  counter+=1  ;  } 
  9. END {  printf "%s\n",  counter  ; }  
  10. '  $file 
  11. else 
  12. ### 若輸入不是文件,則輸出錯誤信息 
  13. echo "$file 不是一個文件,請指定一個文件。" >&2 && exit 1 
  14. fi 
  15. done 
  16. ### 成功執(zhí)行后使用退出代碼 0 終止腳本 
  17. exit 0 

 

 

awk 模式 BEGIN 和 END當我們運行上面的腳本時,它會首先輸出 domains.txt 文件的位置,然后執(zhí)行 awk 命令腳本,該命令腳本中的特殊模式 BEGIN將會在從文件讀取任何行之前幫助我們輸出這樣的消息“文件中出現(xiàn) tecmint.com 的次數(shù)是:”。

接下來,我們的模式 /^tecmint.com/ 會在每個輸入行中進行比較,對應的動作 { counter+=1 ; } 會在每個匹配成功的行上執(zhí)行,它會統(tǒng)計出 tecmint.com 在文件中出現(xiàn)的次數(shù)。

最終,END 模式將會輸出域名 tecmint.com 在文件中出現(xiàn)的總次數(shù)。

 

  1. $ ./script.sh ~/domains.txt 

 

用于統(tǒng)計字符串出現(xiàn)次數(shù)的腳本***總結(jié)一下,我們在本節(jié)中演示了更多的 awk 功能,并學習了特殊模式 BEGIN 和 END 的概念。

正如我之前所言,這些 awk 功能將會幫助我們構(gòu)建出更復雜的文本過濾操作。第十節(jié)將會給出更多的 awk 功能,我們將會學習 awk 內(nèi)置變量的思想,所以,請繼續(xù)保持關(guān)注。

責任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2010-05-11 12:17:51

Unix awk

2016-08-10 16:07:08

awkLinux開源

2016-08-11 09:18:33

awkShellLinux

2016-10-08 20:58:50

awkLinux編寫腳本

2016-07-29 15:13:00

awk文本處理工具編程

2016-08-29 20:51:16

awkLinux開源

2018-03-28 17:51:24

LinuxUnix

2024-09-11 17:00:36

2022-03-20 10:40:11

Linuxawk 腳本

2010-07-23 13:23:10

Perl語言

2019-11-26 14:00:58

awkLinux命令

2010-05-11 10:29:06

Unix awk

2019-12-03 10:00:19

awkLinux循環(huán)

2010-07-23 13:46:27

Perl語言

2010-03-04 15:28:01

Ubuntu Shel

2017-08-04 14:00:32

Linuxawk變量

2019-12-09 14:13:41

awkPython編程語言

2019-12-12 18:00:54

awkLinux開源

2011-08-18 16:57:52

awk中文man

2010-03-04 15:11:06

Ubuntu awk
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费看黄视频网站 | 精品一区二区三区在线观看国产 | 综合色久 | www.国产.com| 成人欧美一区二区三区在线观看 | 夜夜夜操 | 亚洲激情第一页 | 国产精品毛片一区二区在线看 | 精品一区二区三区免费毛片 | 国产精品揄拍一区二区 | 欧美毛片免费观看 | 日本xx视频免费观看 | 中文字幕成人在线 | 电影91久久久| 欧美日韩视频在线 | 请别相信他免费喜剧电影在线观看 | 国产精品av久久久久久久久久 | 成人三级在线播放 | 亚洲精品国产一区 | 久久99蜜桃综合影院免费观看 | 国产精品视频网站 | 国产视频精品区 | 日韩淫片免费看 | 日韩视频三区 | 欧美 日韩精品 | 国产精品日韩欧美一区二区三区 | av在线视 | 中文字字幕一区二区三区四区五区 | 国产日产精品一区二区三区四区 | 成人3d动漫一区二区三区91 | 成人久久18免费网站图片 | 女同av亚洲女人天堂 | 91在线综合 | 欧美午夜精品久久久久免费视 | 国产精品欧美一区二区 | 天天躁日日躁aaaa视频 | 久久久久久久久国产精品 | 亚洲精品综合 | 黄色免费网 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产精品国产精品国产专区不卡 |