精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過兩個簡單的教程來提高你的 awk 技能

系統 Linux
awk 是 Unix 和 Linux 用戶工具箱中最古老的工具之一。超越單行的 awk 腳本,學習如何做郵件合并和字數統計。

[[344424]]

超越單行的 awk 腳本,學習如何做郵件合并和字數統計。

awk 是 Unix 和 Linux 用戶工具箱中最古老的工具之一。awk 由 Alfred Aho、Peter Weinberger 和 Brian Kernighan(即工具名稱中的 A、W 和 K)在 20 世紀 70 年代創建,用于復雜的文本流處理。它是流編輯器 sed 的配套工具,后者是為逐行處理文本文件而設計的。awk 支持更復雜的結構化程序,是一門完整的編程語言。

本文將介紹如何使用 awk 完成更多結構化的復雜任務,包括一個簡單的郵件合并程序。

awk 的程序結構

awk 腳本是由 {}(大括號)包圍的功能塊組成,其中有兩個特殊的功能塊,BEGIN 和 END,它們在處理第一行輸入流之前和最后一行處理之后執行。在這兩者之間,塊的格式為:

  1. 模式 { 動作語句 }

當輸入緩沖區中的行與模式匹配時,每個塊都會執行。如果沒有包含模式,則函數塊在輸入流的每一行都會執行。

另外,以下語法可以用于在 awk 中定義可以從任何塊中調用的函數。

  1. function 函數名(參數列表) { 語句 }

這種模式匹配塊和函數的組合允許開發者結構化的 awk 程序,以便重用和提高可讀性。

awk 如何處理文本流

awk 每次從輸入文件或流中一行一行地讀取文本,并使用字段分隔符將其解析成若干字段。在 awk 的術語中,當前的緩沖區是一個記錄。有一些特殊的變量會影響 awk 讀取和處理文件的方式:

  • FS字段分隔符field separator)。默認情況下,這是任何空格字符(空格或制表符)。
  • RS記錄分隔符record separator)。默認情況下是一個新行(n)。
  • NF字段數number of fields)。當 awk 解析一行時,這個變量被設置為被解析出字段數。
  • $0: 當前記錄。
  • $1$2$3 等:當前記錄的第一、第二、第三等字段。
  • NR記錄數number of records)。迄今已被 awk 腳本解析的記錄數。

影響 awk 行為的變量還有很多,但知道這些已經足夠開始了。

單行 awk 腳本

對于一個如此強大的工具來說,有趣的是,awk 的大部分用法都是基本的單行腳本。也許最常見的 awk 程序是打印 CSV 文件、日志文件等輸入行中的選定字段。例如,下面的單行腳本從 /etc/passwd 中打印出一個用戶名列表:

  1. awk -F":" '{print $1 }' /etc/passwd

如上所述,$1 是當前記錄中的第一個字段。-F 選項將 FS 變量設置為字符 :

字段分隔符也可以在 BEGIN 函數塊中設置:

  1. awk 'BEGIN { FS=":" } {print $1 }' /etc/passwd

在下面的例子中,每一個 shell 不是 /sbin/nologin 的用戶都可以通過在該塊前面加上匹配模式來打印出來:

  1. awk 'BEGIN { FS=":" } ! /\/sbin\/nologin/ {print $1 }' /etc/passwd

awk 進階:郵件合并

現在你已經掌握了一些基礎知識,嘗試用一個更具有結構化的例子來深入了解 awk:創建郵件合并。

郵件合并使用兩個文件,其中一個文件(在本例中稱為 email_template.txt)包含了你要發送的電子郵件的模板:

  1. From: Program committee <pc@event.org>
  2. To: {firstname} {lastname} <{email}>
  3. Subject: Your presentation proposal
  4.  
  5. Dear {firstname},
  6.  
  7. Thank you for your presentation proposal:
  8. {title}
  9.  
  10. We are pleased to inform you that your proposal has been successful! We
  11. will contact you shortly with further information about the event
  12. schedule.
  13.  
  14. Thank you,
  15. The Program Committee

而另一個則是一個 CSV 文件(名為 proposals.csv),里面有你要發送郵件的人:

  1. firstname,lastname,email,title
  2. Harry,Potter,hpotter@hogwarts.edu,"Defeating your nemesis in 3 easy steps"
  3. Jack,Reacher,reacher@covert.mil,"Hand-to-hand combat for beginners"
  4. Mickey,Mouse,mmouse@disney.com,"Surviving public speaking with a squeaky voice"
  5. Santa,Claus,sclaus@northpole.org,"Efficient list-making"

你要讀取 CSV 文件,替換第一個文件中的相關字段(跳過第一行),然后把結果寫到一個叫 acceptanceN.txt 的文件中,每解析一行就遞增文件名中的 N

把 awk 程序寫在一個叫 mail_merge.awk 的文件中。在 awk 腳本中的語句用 ; 分隔。第一個任務是設置字段分隔符變量和其他幾個腳本需要的變量。你還需要讀取并丟棄 CSV 中的第一行,否則會創建一個以 Dear firstname 開頭的文件。要做到這一點,請使用特殊函數 getline,并在讀取后將記錄計數器重置為 0。

  1. BEGIN {
  2.   FS=",";
  3.   template="email_template.txt";
  4.   output="acceptance";
  5.   getline;
  6.   NR=0;
  7. }

主要功能非常簡單:每處理一行,就為各種字段設置一個變量 —— firstnamelastnameemail 和 title。模板文件被逐行讀取,并使用函數 sub 將任何出現的特殊字符序列替換為相關變量的值。然后將該行以及所做的任何替換輸出到輸出文件中。

由于每行都要處理模板文件和不同的輸出文件,所以在處理下一條記錄之前,需要清理和關閉這些文件的文件句柄。

  1. {
  2.         # 從輸入文件中讀取關聯字段
  3.         firstname=$1;
  4.         lastname=$2;
  5.         email=$3;
  6.         title=$4;
  7.  
  8.         # 設置輸出文件名
  9.         outfile=(output NR ".txt");
  10.  
  11.         # 從模板中讀取一行,替換特定字段,
  12.         # 并打印結果到輸出文件。
  13.         while ( (getline ln &lt; template) &gt; 0 )
  14.         {
  15.                 sub(/{firstname}/,firstname,ln);
  16.                 sub(/{lastname}/,lastname,ln);
  17.                 sub(/{email}/,email,ln);
  18.                 sub(/{title}/,title,ln);
  19.                 print(ln) &gt; outfile;
  20.         }
  21.  
  22.         # 關閉模板和輸出文件,繼續下一條記錄
  23.         close(outfile);
  24.         close(template);
  25. }

你已經完成了! 在命令行上運行該腳本:

  1. awk -f mail_merge.awk proposals.csv

  1. awk -f mail_merge.awk < proposals.csv

你會在當前目錄下發現生成的文本文件。

awk 進階:字頻計數

awk 中最強大的功能之一是關聯數組,在大多數編程語言中,數組條目通常由數字索引,但在 awk 中,數組由一個鍵字符串進行引用。你可以從上一節的文件 proposals.txt 中存儲一個條目。例如,在一個單一的關聯數組中,像這樣:

  1.         proposer["firstname"]=$1;
  2.         proposer["lastname"]=$2;
  3.         proposer["email"]=$3;
  4.         proposer["title"]=$4;

這使得文本處理變得非常容易。一個使用了這個概念的簡單的程序就是詞頻計數器。你可以解析一個文件,在每一行中分解出單詞(忽略標點符號),對行中的每個單詞進行遞增計數器,然后輸出文本中出現的前 20 個單詞。

首先,在一個名為 wordcount.awk 的文件中,將字段分隔符設置為包含空格和標點符號的正則表達式:

  1. BEGIN {
  2. # ignore 1 or more consecutive occurrences of the characters
  3. # in the character group below
  4. FS="[ .,:;()<>{}@!\"'\t]+";
  5. }

接下來,主循環函數將遍歷每個字段,忽略任何空字段(如果行末有標點符號,則會出現這種情況),并遞增行中單詞數:

  1. {
  2.         for (i = 1; i &lt;= NF; i++) {
  3.                 if ($i != "") {
  4.                         words[$i]++;
  5.                 }
  6.         }
  7. }

最后,處理完文本后,使用 END 函數打印數組的內容,然后利用 awk 的能力,將輸出的內容用管道輸入 shell 命令,進行數字排序,并打印出 20 個最常出現的單詞。

  1. END {
  2.         sort_head = "sort -k2 -nr | head -n 20";
  3.         for (word in words) {
  4.                 printf "%s\t%d\n", word, words[word] | sort_head;
  5.         }
  6.         close (sort_head);
  7. }

在這篇文章的早期草稿上運行這個腳本,會產生這樣的輸出:

  1. [dneary@dhcp-49-32.bos.redhat.com]$ awk -f wordcount.awk < awk_article.txt
  2. the 79
  3. awk 41
  4. a 39
  5. and 33
  6. of 32
  7. in 27
  8. to 26
  9. is 25
  10. line 23
  11. for 23
  12. will 22
  13. file 21
  14. we 16
  15. We 15
  16. with 12
  17. which 12
  18. by 12
  19. this 11
  20. output 11
  21. function 11

下一步是什么?

如果你想了解更多關于 awk 編程的知識,我強烈推薦 Dale Dougherty 和 Arnold Robbins 所著的《Sed 和 awk》這本書。

awk 編程進階的關鍵之一是掌握“擴展正則表達式”。awk 為你可能已經熟悉的 sed 正則表達式語法提供了幾個強大的補充。

另一個學習 awk 的好資源是 GNU awk 用戶指南。它有一個完整的 awk 內置函數庫的參考資料,以及很多簡單和復雜的 awk 腳本的例子。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-02-06 14:21:12

Linux 開發操作系統

2022-07-13 15:46:57

Python數據可視化代碼片段

2020-08-04 08:30:18

JS數組技巧

2011-03-01 13:07:36

MySQLOrder by查詢

2020-03-05 08:58:42

JavaScript語言開發

2020-03-05 21:40:49

Javascript前端

2022-07-08 14:50:12

時間管理技巧工作效率

2021-04-12 08:00:00

云存儲數據數據中心

2020-06-14 14:48:23

機器學習Python

2010-05-20 09:07:30

jQuery

2013-05-10 10:03:09

開源項目開源使用率集成商

2024-01-19 13:45:00

Pandas代碼深度學習

2009-08-12 16:37:22

C#變量類型轉換

2022-08-20 19:12:22

編程竅門

2010-05-28 09:57:50

TortoiseSVN

2020-04-06 12:20:51

Vim文本編輯器Linux

2019-10-08 15:27:18

掃雷BashLinux

2011-04-15 09:47:38

IntentActivityAndroid

2023-11-22 16:08:29

大數據提高數據質量

2025-01-07 09:16:16

點贊
收藏

51CTO技術棧公眾號

国产视频一区在线观看| 激情综合久久| 欧美精品第1页| 国产内射老熟女aaaa| 亚洲国产精品视频在线| 一本久道久久综合狠狠爱| 亚洲午夜av电影| 一级黄色高清视频| 日韩伦理在线| 国产精品久线在线观看| 电影午夜精品一区二区三区| 91精品国产综合久久久蜜臀九色| 国内精品视频在线观看 | 国产 国语对白 露脸| 色香蕉在线视频| 久久国内精品视频| 欧美一级电影久久| 成年人二级毛片| 久久不见久久见中文字幕免费| 欧美一区永久视频免费观看| 日韩精品一区二区三区不卡| 五月天激情在线| 国产精品―色哟哟| 久久综合九色综合久99| 国产www免费观看| 久久精品一区二区三区中文字幕| 欧美激情欧美激情| 91资源在线播放| 欧美久久精品| 亚洲国产精品成人av| 午夜一区二区视频| 欧美日韩卡一| 在线观看三级视频欧美| 日日摸日日碰夜夜爽无码| 国产黄色小视频在线| 国产三区在线成人av| 国外成人在线视频网站| 99久久国产免费| 全部av―极品视觉盛宴亚洲| 欧美亚洲午夜视频在线观看 | 亚洲在线免费播放| 欧美 国产 精品| 久久国产精品一区| 国产精品免费免费| 视频一区二区三| 日韩精品一二| 91欧美激情一区二区三区成人| 91超碰在线电影| 99热这里只有精| 国产在线播精品第三| 国产精品色午夜在线观看| 久久人妻免费视频| 新67194成人永久网站| 97在线日本国产| 欧美a∨亚洲欧美亚洲| 一区二区三区精品视频在线观看| 高清一区二区三区日本久| 免费中文字幕视频| 国产精品v亚洲精品v日韩精品 | 亚洲精品自拍第一页| 秘密基地免费观看完整版中文| av不卡一区| 亚洲第一精品自拍| www.日本高清| 国产乱码精品一区二区亚洲| 亚洲视频在线观看| 国产午夜福利一区| 天堂美国久久| 久久久久久成人| 亚洲日本韩国在线| 日韩影院精彩在线| 国产在线精品自拍| 国产高中女学生第一次| 不卡的av网站| 女同一区二区| 四虎久久免费| 亚洲制服丝袜av| 99蜜桃臀久久久欧美精品网站| 日韩欧美精品电影| 欧美精品日韩综合在线| 精品无码av一区二区三区不卡| 国产毛片精品| 在线电影中文日韩| 久久久久久久9999| 免费国产自线拍一欧美视频| 国产噜噜噜噜噜久久久久久久久 | 亚洲国产成人精品久久| 日韩精品无码一区二区三区久久久| 欧美日韩久久精品| 久久99国产精品久久久久久久久| 午夜精品久久久久久久久久久久久蜜桃| 亚洲永久网站| 成人激情视频网| 熟妇高潮一区二区三区| 欧美韩日一区二区三区四区| 国产精品igao激情视频| 午夜欧美巨大性欧美巨大| 91精品欧美久久久久久动漫| 亚洲精品中文字幕在线播放| 日韩久久电影| 97久久伊人激情网| 亚洲一区中文字幕永久在线| 成人不卡免费av| 台湾成人av| 538视频在线| 欧美日韩黄色一区二区| 欧美熟妇精品一区二区蜜桃视频| 成人系列视频| 亚州国产精品久久久| 最新中文字幕免费| 91日韩精品一区| 成人国产在线看| 成人在线观看免费视频| 亚洲国产精品va在线看黑人| 天天做夜夜爱爱爱| 视频一区视频二区在线观看| 国产精品日本一区二区| 毛片在线看网站| 日本高清无吗v一区| 成人做爰www看视频软件 | 久久久久免费看黄a片app| 日韩在线你懂得| 亚洲欧洲xxxx| 黄色大片网站在线观看| 高清不卡一二三区| 久久av喷吹av高潮av| 韩日精品一区| 亚洲欧美日韩国产中文专区| 日韩成人一区二区三区| 国产福利精品一区二区| 亚洲一区二区三区四区中文| 成人自拍av| 亚洲精品视频免费| 黄色片视频网站| 成人国产精品免费观看视频| 久久精品在线免费视频| av在线国产精品| 深夜福利日韩在线看| 中日韩av在线| 中文字幕精品—区二区四季| 黄色高清无遮挡| 蜜桃精品噜噜噜成人av| 91高潮精品免费porn| 手机看片福利在线| 五月婷婷综合在线| 国产激情第一页| 亚洲人成毛片在线播放女女| 粉嫩av四季av绯色av第一区| 欧美xxxx少妇| 亚洲精品一区在线观看| 国产污片在线观看| 99精品久久免费看蜜臀剧情介绍| 久久久性生活视频| 激情小说亚洲图片| 45www国产精品网站| 五月天婷婷在线观看| 欧美性高潮床叫视频| 麻豆国产精品一区| 久久国产一二区| 麻豆精品蜜桃一区二区三区| 欧美18—19sex性hd| 亚洲午夜久久久影院| 在线观看国产小视频| 国产精品久久久久久久久免费樱桃| av网站在线不卡| 99视频精品视频高清免费| 91亚洲国产成人精品性色| 性爱视频在线播放| 亚洲第一精品福利| 波多野结衣啪啪| 中文乱码免费一区二区| 亚洲一区二区偷拍| 亚洲激情午夜| 日韩精品av一区二区三区| 视频欧美精品| 国模精品系列视频| 免费资源在线观看| 欧美丰满少妇xxxxx高潮对白| 欧美成人精品欧美一级| 成人av午夜电影| 成年人网站大全| 久久精品影视| 国产一区福利视频| 黄色精品视频| 欧美黑人视频一区| 国产视频网站在线| 91精品国产综合久久久久| 四虎成人精品永久免费av| 国产午夜三级一区二区三| 视频区 图片区 小说区| 日韩午夜一区| 美国av在线播放| 综合亚洲自拍| 91中文字幕一区| 欧美成人ⅴideosxxxxx| 久久久精品网站| 男女视频在线观看免费| 日韩欧美在线123| 国产一级片av| 亚洲18女电影在线观看| 国产三级精品三级观看| 91视频免费看| 真实乱偷全部视频| 日产国产欧美视频一区精品| 精品视频在线观看一区二区| 久久不卡国产精品一区二区| 99在线观看| 丰满少妇一区| 琪琪第一精品导航| 国产美女情趣调教h一区二区| 亚洲男人av电影| 亚洲精品久久久久久久久久| 欧美视频你懂的| 97久久久久久久| 亚洲一区在线电影| 丝袜 亚洲 另类 欧美 重口 | 综合五月激情网| 欧美国产日韩亚洲一区| 一级黄色片毛片| 国产乱人伦偷精品视频免下载| 欧美精品一区二区三区免费播放| 亚洲一级影院| 美女av免费观看| 午夜精品一区二区三区国产| 欧美日韩精品免费看| 成人另类视频| 96久久精品| 精品国产亚洲一区二区在线观看 | 国产 欧美 自拍| 欧美浪妇xxxx高跟鞋交| 最新在线中文字幕| 欧美网站一区二区| 久久久久久久久久一级| 一本一道综合狠狠老| 日韩av黄色片| 午夜不卡av在线| 天天操天天干视频| 五月婷婷久久丁香| 日韩欧美一区二区一幕| 亚洲高清免费观看高清完整版在线观看 | 国产性天天综合网| 少妇久久久久久久久久| 久久先锋影音av鲁色资源| 久久久久国产精品区片区无码| 成人免费的视频| 中文视频在线观看| 不卡高清视频专区| 久久国产精品无码一级毛片| 成人av在线一区二区| 超薄丝袜一区二区| а√天堂资源在线| 欧美大片在线观看一区二区| 国产精品一区二区三区在线免费观看| 欧美日韩精品一区二区三区蜜桃| 中文字幕在线观看第二页| 欧美日韩久久久一区| 国产又黄又大又爽| 日韩一区二区精品| 国模私拍视频在线| 日韩二区三区在线| 黄视频在线播放| 中文字幕精品在线视频| 欧美性videos| 欧美美最猛性xxxxxx| xxx.xxx欧美| 欧美野外猛男的大粗鳮| 高清成人在线| 国产中文字幕亚洲| 大香伊人久久精品一区二区| 精品国产乱码久久久久久久软件 | 中文字幕亚洲二区| 快射视频在线观看| 欧美激情在线有限公司| 女厕盗摄一区二区三区| 国产不卡视频在线| 婷婷激情成人| 国产精品一区二区三区四区五区| 任你躁在线精品免费| 亚洲国产一区二区在线| 欧美1区2区| 啊啊啊一区二区| 麻豆精品一区二区av白丝在线| 99999精品| 91香蕉视频在线| 黄色精品视频在线观看| 亚洲第一激情av| 狠狠狠狠狠狠狠| 欧美一区二区免费视频| 嫩草研究院在线| 欧美激情第6页| 国产91欧美| 国产一区免费观看| 久久国产小视频| 99热自拍偷拍| 国产一区二区三区四区五区美女| 日本一区二区在线观看视频| 久久九九99视频| 久草视频免费播放| 欧美少妇一区二区| 天天摸夜夜添狠狠添婷婷| 日韩视频精品在线| 亚洲私拍视频| 91青青草免费在线看| 国产伦精品一区二区三区千人斩| 欧美中日韩在线| 久久精品国产精品青草| yy1111111| 有坂深雪av一区二区精品| 亚洲精品一区二区二区| 亚洲高清不卡av| av中文字幕在线观看| 国产成人精品电影久久久| av综合网站| 中国一级黄色录像| 免费在线视频一区| 女~淫辱の触手3d动漫| 亚洲国产另类精品专区| 91丨九色丨蝌蚪丨对白| 亚洲乱码一区av黑人高潮| 欧美性猛片xxxxx免费中国| 国产精品毛片a∨一区二区三区|国| 精品欠久久久中文字幕加勒比| 裸体裸乳免费看| 麻豆国产精品视频| 亚洲精品成人无码| 午夜精品影院在线观看| www.麻豆av| 超在线视频97| 伊人久久大香| 亚洲欧美日韩国产yyy| 久久精品导航| 一卡二卡三卡四卡| 欧美日韩国产一区二区三区| 丰满人妻妇伦又伦精品国产| 久久成人在线视频| 99久久99九九99九九九| 亚洲精品久久久久久一区二区| 狂野欧美一区| 亚洲熟妇一区二区三区| 日韩欧美亚洲国产一区| 青青草在线免费视频| 秋霞av国产精品一区| 日韩欧美影院| 69堂免费视频| 91麻豆国产福利精品| 伊人手机在线视频| 亚洲精品在线视频| 激情亚洲影院在线观看| 日本黑人久久| 美腿丝袜在线亚洲一区| 亚洲天堂岛国片| 欧美日韩在线播放一区| 天堂аⅴ在线地址8| 成人自拍性视频| 女主播福利一区| 天堂www中文在线资源| 欧美日韩亚洲精品内裤| 国产永久免费高清在线观看视频| 国产精品久久久久久久久久东京| 国内精品久久久久久99蜜桃| 五月天婷婷亚洲| 亚洲精品免费一二三区| 亚洲精品中文字幕成人片| 97精品免费视频| 欧美一区二区性| 91视频这里只有精品| 一区二区三区四区乱视频| 天堂在线中文网| 国产精品极品在线| 国产精品精品国产一区二区| 深夜视频在线观看| 欧美性xxxx18| 成人av福利| 精选一区二区三区四区五区| 日韩精品午夜视频| 极品久久久久久| 亚洲激情在线观看| 成人mm视频在线观看| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 97精品一区| www.com日本| 欧美优质美女网站| 特级毛片在线| 久久香蕉综合色| 狠狠色伊人亚洲综合成人| 91精品国产高潮对白| 国产一区二区三区视频| 日韩免费高清视频网站| 精品一区二区中文字幕| 亚洲欧洲精品一区二区三区不卡| 囯产精品久久久久久| 国产精品久久久久久亚洲调教| 亚洲视频综合| 中文字幕在线观看二区| 亚洲成人国产精品| 欧美三级电影网址| 国产免费毛卡片| 一区二区三区四区在线免费观看| 狠狠狠综合7777久夜色撩人| 97se在线视频|