精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费看黄在线看| 国产一区二区三区高清视频| 亚洲精品电影院| 国产精品亚洲欧美日韩一区在线| 亚洲一级二级在线| 品久久久久久久久久96高清| 一区二区日韩在线观看| 亚洲日本黄色| xxxx欧美18另类的高清| 亚洲国产精品无码久久久久高潮| 国产精品99| 精品久久久久久亚洲国产300| 亚洲区一区二区三区| 成人免费一级视频| 麻豆精品一区二区三区| 91国语精品自产拍在线观看性色 | 国产精品va在线播放| 三级黄色免费观看| 亚洲人成网站77777在线观看| 7777精品伊人久久久大香线蕉超级流畅| 日本午夜激情视频| 老司机精品视频在线观看6| www.色精品| 91中文在线观看| 成人免费一区二区三区| 妖精视频成人观看www| 另类图片亚洲另类| 一级在线观看视频| 私拍精品福利视频在线一区| 日韩一二在线观看| 日本超碰在线观看| 欧美极度另类| 狠狠色狠色综合曰曰| 91视频成人免费| 日韩精品黄色| 国产婷婷色一区二区三区在线| 国产精品久久国产精品| 国产色视频在线| 看电视剧不卡顿的网站| 国产精品偷伦一区二区| 日韩欧美国产另类| 美女精品在线观看| 国产成人av在线| 午夜影院在线看| 亚洲网站视频| 欧美国产亚洲精品久久久8v| 美女福利视频在线观看| 97视频精品| 深夜福利91大全| 久久久精品成人| 欧美一区二区三区激情视频| 亚洲人在线视频| aaaaa级少妇高潮大片免费看| 噜噜噜天天躁狠狠躁夜夜精品 | 深夜福利免费在线观看| 不卡区在线中文字幕| 国产日本一区二区三区| 女人18毛片一区二区三区| 成人视屏免费看| 久久国产精品亚洲va麻豆| 天天操天天操天天操| 不卡的av网站| 欧美精品一区二区三区久久| 青青草娱乐在线| 国产亚洲婷婷免费| 亚洲欧洲精品一区| www在线视频| 亚洲电影中文字幕在线观看| 18禁网站免费无遮挡无码中文| av日韩中文| 日本黄色一区二区| 久久黄色片网站| 日本少妇精品亚洲第一区| 欧美xxxxxxxx| 国产精品一区二区入口九绯色| 女人av一区| 精品国偷自产在线视频99| 国产女人被狂躁到高潮小说| 亚洲激情av| 国产成人高潮免费观看精品| 亚洲网站免费观看| 国产成人在线视频免费播放| 国产综合av一区二区三区| 玖玖综合伊人| 亚洲视频免费在线观看| 日韩国产一级片| 亚洲精品在线影院| 欧美一区二区三区视频| 亚洲av成人无码一二三在线观看| 免费看成人哺乳视频网站| 日韩专区在线播放| 久久黄色小视频| 久久一二三四| 5566中文字幕一区二区| 欧美色图另类| 亚洲精品一二三| 2022亚洲天堂| 99久久这里有精品| 日韩精品福利网站| 久久中文免费视频| 天堂蜜桃91精品| 国产精品 日韩| p色视频免费在线观看| 亚洲精品日韩一| 日本888xxxx| av综合网址| 色琪琪综合男人的天堂aⅴ视频| 久久久无码精品亚洲国产| 视频一区在线视频| 国产乱人伦精品一区二区| 午夜国产福利在线| 欧美日韩亚洲一区二区| 日本中文字幕在线不卡| 精品国产乱码久久久久久蜜坠欲下 | 国产高清不卡| 精品久久久久久久一区二区蜜臀| 在线观看免费小视频| 亚洲精品影院在线观看| 国产欧美一区二区三区四区| 午夜小视频免费| 一区二区三区在线不卡| 在线看的黄色网址| 久久99精品久久久久久园产越南| 欧美高清视频在线观看| 97久久人国产精品婷婷| 欧美韩国一区二区| 国模杨依粉嫩蝴蝶150p| 秋霞在线一区| 国产69精品久久久久9999| av综合在线观看| 国产精品二区一区二区aⅴ污介绍| 国产男女无遮挡| 噜噜噜狠狠夜夜躁精品仙踪林| 九九精品视频在线观看| 国产欧美久久久| 亚洲欧洲精品天堂一级| 日本不卡一区在线| 日韩在线中文| 国产精品一区二区三| 国产鲁鲁视频在线观看免费| 欧美日韩一区二区在线| 你懂的在线观看网站| 亚洲人人精品| 久久精品ww人人做人人爽| 免费毛片b在线观看| 亚洲精品福利免费在线观看| 日韩欧美亚洲视频| 91一区二区三区在线播放| 欧美久久久久久久久久久久久| 大奶一区二区三区| 国内免费精品永久在线视频| 欧美一级在线免费观看| 亚洲成av人片在线观看| 黄色激情在线观看| 日韩午夜精品| 久久国产精品-国产精品| 在线黄色的网站| 亚洲人成五月天| 最近国语视频在线观看免费播放| 国产精品区一区二区三| 久国产精品视频| 欧美日韩免费| 久久99精品久久久水蜜桃| 天堂网在线最新版www中文网| 亚洲精品视频在线观看视频| 亚洲图片欧美日韩| 亚洲欧洲av在线| 国产在线a视频| 亚洲每日在线| 日本午夜精品电影| 国产亚洲观看| 久久理论片午夜琪琪电影网| 飘雪影院手机免费高清版在线观看| 在线观看成人小视频| 最新日韩免费视频| 国产99久久久国产精品免费看 | 日韩欧美国产综合| 日韩欧美大片在线观看| 国产日产欧美一区| www激情五月| 国产日韩一区二区三区在线播放| 日韩欧美三级电影| 高清国产一区二区三区四区五区| 久久人人看视频| 搞黄视频在线观看| 精品美女一区二区| 国产成人精品亚洲| 亚洲自拍偷拍综合| 欧洲美一区二区三区亚洲| 国内精品伊人久久久久av一坑| 天堂…中文在线最新版在线| 日韩大片在线播放| 国产美女精品久久久| 色猫猫成人app| 欧美极品在线播放| av播放在线观看| 亚洲成人网av| 一区二区三区播放| 日韩欧美成人网| 久久中文免费视频| 国产欧美一区二区在线| 国产人成视频在线观看| 久久99久久99小草精品免视看| 日韩视频免费播放| 1024精品久久久久久久久| 久久综合狠狠综合久久综青草| 亚洲成人高清| 国产激情999| 白浆在线视频| 欧美裸体男粗大视频在线观看| 蜜桃视频在线免费| 亚洲国产精品久久91精品| 91麻豆国产视频| 91高清视频在线| 成人精品免费在线观看| 亚洲色图 校园春色| 亚洲一区二区三区四区不卡 | 亚洲男人电影天堂| 一色道久久88加勒比一| 成人性生交大片| 奇米影视四色在线| 日韩黄色在线观看| 日本免费不卡一区二区| 欧美久久99| 成人国产一区二区三区| 99久久99视频只有精品| 清纯唯美一区二区三区| 天天躁日日躁狠狠躁欧美| 国产乱码精品一区二区三区中文 | 盗摄牛牛av影视一区二区| 91老司机在线| 四虎国产精品免费久久| 国产精品丝袜久久久久久高清| 朝桐光一区二区| 日韩av三级在线观看| 亚洲精品88| 欧美亚洲视频一区二区| 激情aⅴ欧美一区二区欲海潮| 欧美极品欧美精品欧美视频| 2024最新电影免费在线观看| 超碰91人人草人人干| 免费a级人成a大片在线观看| 色偷偷综合社区| 欧美三级理伦电影| 久久久国产一区| 综合久久2019| 久久青草精品视频免费观看| 美女网站在线看| 97精品视频在线| 最近高清中文在线字幕在线观看1| 亚洲91精品在线观看| 98色花堂精品视频在线观看| 97av视频在线| 亚洲电影有码| 91精品国产综合久久香蕉的用户体验 | 国产福利视频在线| 日韩网站在线观看| 中文av资源在线| 久久久久久91| 精精国产xxxx视频在线野外| 国产98色在线| www.国产精品| 亚洲sss综合天堂久久| 中文一区二区三区四区| 久久久7777| 久久亚洲精品中文字幕蜜潮电影| 懂色av一区二区三区四区五区| 欧美成人中文| 免费黄色福利视频| 日韩电影在线看| 红桃视频 国产| 成人午夜在线视频| 欧洲美一区二区三区亚洲| 国产精品久久久久久久浪潮网站| 九九视频免费看| 欧美午夜激情在线| 91在线观看喷潮| 精品国产免费视频| 久草在线青青草| 久久夜色精品国产| 日韩激情电影| 成人午夜激情网| 日本在线中文字幕一区| 伊人久久大香线蕉成人综合网| 女生裸体视频一区二区三区| 国产极品粉嫩福利姬萌白酱| 九九精品视频在线看| 国产+高潮+白浆+无码| 国产日韩精品一区二区三区在线| 中文字幕手机在线观看| 色婷婷综合久久久久中文| 国产精品高潮呻吟av| 日韩黄色在线免费观看| 麻豆tv入口在线看| 日本最新高清不卡中文字幕| 欧美黄视频在线观看| 日韩欧美三级一区二区| 日韩亚洲国产精品| 视频区 图片区 小说区| 国产亚洲欧美色| 国产在线视频二区| 欧美精品日日鲁夜夜添| 日韩私人影院| 欧美精品福利视频| 91精品国产自产观看在线| 蜜桃精品久久久久久久免费影院| 中文字幕一区二区av| 妓院一钑片免看黄大片| 成人的网站免费观看| www深夜成人a√在线| 色婷婷国产精品综合在线观看| 国产色综合视频| 中文字幕在线成人| a欧美人片人妖| 成人资源视频网站免费| 午夜精品久久久久久久四虎美女版| 男女av免费观看| 99视频精品全部免费在线| 九九免费精品视频| 欧美一级免费大片| 黄色一级片在线观看| 国产精品久在线观看| 你懂的视频欧美| 国产欧美在线一区| www.欧美亚洲| 国产一级aa大片毛片| 校园春色 亚洲色图| 性欧美lx╳lx╳| 日韩激情视频一区二区| 紧缚捆绑精品一区二区| 亚洲精品色午夜无码专区日韩| 黄色成人av在线| 男人天堂网在线视频| 色综合久久88| 麻豆精品在线| 中文字幕第一页亚洲| 毛片基地黄久久久久久天堂| 日本一区二区视频在线播放| 91国产成人在线| 福利视频在线看| 国产精品久久久久影院日本| 国产精品手机在线播放| 欧美日韩一区二区在线免费观看| 97久久久精品综合88久久| 国产香蕉视频在线| 亚洲精品99久久久久中文字幕| 超碰97免费在线| 精品无人乱码一区二区三区的优势| 欧美日韩一区二区国产| 国产51自产区| 欧美性猛交xxxxx免费看| 嫩草研究院在线观看| 国产99久久久欧美黑人| 第一会所亚洲原创| 最新国产黄色网址| 亚洲人成精品久久久久久| 精品欧美一区二区精品少妇| 欧美精品久久久久a| 国内自拍欧美| 99久久激情视频| 中文字幕国产一区| 国产毛片一区二区三区va在线| 欧美精品一区二区三区国产精品| 91精品尤物| www在线观看免费| 久久精品人人爽人人爽| 国产一区二区在线播放视频| 欧美成人一区二区三区电影| 久久中文资源| 在线观看的毛片| 亚洲视频1区2区| 天天干视频在线观看| 国产成人一区二区三区小说| 亚洲精品va| aaaaaav| 欧美三级欧美一级| 四虎影视国产在线视频| 乱色588欧美| 久久99深爱久久99精品| 久草国产精品视频| 日韩在线视频导航| 红杏aⅴ成人免费视频| www.欧美日本| 亚洲综合激情小说| 国产一级网站视频在线| 97久久天天综合色天天综合色hd| 国产精品综合| 男人的天堂久久久| 精品伊人久久97| 久久久久久亚洲精品美女| 18岁网站在线观看| 亚洲免费在线视频一区 二区| 你懂的在线播放| 97夜夜澡人人双人人人喊| 日韩一区欧美二区| 久久国产精品波多野结衣| 亚洲最新av在线网站| 成人搞黄视频| 91日韩精品视频| 色综合久久88色综合天天|