關於shell:awk 的學習(一) 寫在前面的東西

正所謂,知己知彼百戰不殆,想要拿下awk,必需瞭解它的前世今生;

一、它可以做什麼

    1、 awk 是一種編程語言, 可以用作linux或者Unix的bash腳本中;也可以單獨放在一個文件中,通過awk命令解釋器運行;

          【這裏只關注awk用作bash腳本中】

    2、awk 主要功能是,基於指定的規則,對文本或者數據做瀏覽和提取操作;  其處理原則爲:逐行掃描文件,從第一行到最後一行,尋找匹配指定規則的內容。   【awk命令的主要功能是對文本做提取操作,所以,bash腳本編寫中,awk經常與其它指令聯合是使用:通過awk提取指定行,然後對該行做你所需要的操作。

二、它怎麼使用呢 

   1、語法結構

      awk    選項   '命令部分'    文件名

   【基本的awk 指令語法構成就是如上所示,也有一些更高階的操作,這個後續再學習】

 2、一些基本概念 【寫在前面的東西】

    1)分隔符和域   

        分隔符,就是語法結構中的『選項』部分,  awk指令中,通過 -F   來定義字段的分隔符; awk指令默認的分隔符爲空格,如果要處理的文件時以空格分割,則無需指定選項 -F ;  如果是通過除空格之外的其它字符分割,則必需指定-F ;

        域: 定義了分隔符,則比如會有文本被分割成一段一段的, 這裏統稱爲域; 域的標記符爲:$1,  $2,  $3 ...  $n  ;  其中,$0 表示所有的域;

      一個栗子:【遺留一個問題, 如果實現tab鍵分割,後續學習後,再補充

定義文件【文件包含多列,列之間通過逗號分割】:
vim 1
序號,姓名,年齡,職業$
1,張三,19,學生$
2,李四,25,程序員$
3,王五,40,教師$


awk -F ,  '{print $0}'  1

輸出結果爲:
序號,姓名,年齡,職業
1,張三,19,學生
2,李四,25,程序員
3,王五,40,教師

#解析:  -F  定義分隔符爲逗號; 如果是以其它字符分割,則直接更換即可;
        $0  定義域,這裏輸出全部域;  【可以通過域標識符,更換輸出的域, 比如$1, 則只輸出第一列】 
        1   爲我定義的文件名字;

     2)模式和動作

     他們說,awk語句,是由『模式』和『動作』兩部分組成的;那麼什麼是模式,什麼是動作呢?

     動作:就是,定義對數據的具體操作;【也就是一些列的操作指令】;

     模式:則定義了『動作』被觸發的條件; 

               【可以是條件語句、正則匹配、複合語句等】;

               【當然了,這並非必需的,若沒有定義模式,則動作將保持時刻被觸發的狀態】

               【模式以關鍵詞BEGIN和END來標識, 其中BEGIN 定義在 動作之前執行;  END定義的內容則在動作之後執行】

        一個栗子:

還是文件: 1;

執行如下指令:
$ awk -F , 'BEGIN {print "---start print the file---"} {print $2} END {print "---the end---"}'  1 


輸出結果爲:
---start print the file---
姓名
張三
李四
王五
---the end---



#解析:  
1、-F: 定義分隔符,不做解釋;
2、'BEGIN {print "---start print the file---"} {print $2} END {print "---the end---"}'   爲模式定義和動作定義;  單引號不能省略;
  1)其中  BEGIN {print "---start print the file---"}   定義動作開始前執行的操作; 
  2){print $2}  爲動作定義;
  3) END {print "---the end---"}'  定義動作結束後執行的操作;
  4)每一個操作,需要{};
  

          

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章