awk(三)雜亂

本文整體佈局,按照sed和awk第二版的重點來,算是學習筆記吧!

小記:前兩篇章是自己總結的,可以先了解下,本文不打算按部就班的講,以前面兩節爲知識鋪墊

核心:掌握awk的規則

awk是一門解釋性(程序設計)語言,本文從打印Hello Awk開始

(1)需求:打印 Hello Awk

# 細細體會這種寫法-->雙引號包含單引號

awk 'BEGIN{print "'$var'"}'

test

小知識點

#(1)echo -e激活轉義字符,使用-e選項時,若出現某些特殊字符,則特別加以處理,而不會將它當成一般文字輸出

#(2)當awk中print語句沒有參數,只是簡單輸出每個輸入行

#(3)運行原理:對於文本中的每一行(作爲對象),用{pattern}進行匹配,如果匹配就對該行進行{action}

#(4)BEGIN:BEGIN模式用於指定在第一個輸入行讀入之前要執行動作,可以只有BEGIN模式,沒有其它語句,此時awk將不處理任何輸入文件

AWK與SHELL之間的變量傳遞方法

參考

(2)awk是輸入驅動

#(1):每次輸入之後都需要按RETURN鍵

#(2):結束的時候可以按CTRL-D鍵盤

(3)awk的設計模型

'BEGIN':在任何輸入'被讀取前'執行的例程-->常用來做'初始化'

'中間':讀入每個輸入行時('一次讀入一行')執行第二個例程(主輸入循環)

'END':在所有的'輸入完成後'(全部文件內容)執行第三個例程-->常做'統計收尾'

牢記:每個模式/操作過程位於主輸入循環中個,且負責讀取輸入行;所編寫的過程將應用於每個輸入行,而且一次一行

(4)模式匹配初涉

pattern:顧名思義是符合標準,自然而然涉及到了正則表達式

原理:當awk讀入一輸入行時,它試圖匹配腳本中的每個模式匹配規則,只有與一個特定模式匹配輸入行才能稱之爲操作對象

awk的正則表達式是屬於:擴展的正則表達式

經典的模式

'空行': /^$/

'整數':/[0-9]+/

awk '/[0-9]+/{print}' file

特殊:一行匹配多個規則

注意:輸入4T被標識即是整數,又是字符串,即一行匹配多個規則,一般要防止一行與多個規則匹配

說明:pattern1處理之後,pattern2日仍是原模式空間的改行匹配,而不是pattern1處理後的結果pattern2再處理

補充:awk腳本的註釋也是#

(5)記錄(Record)和字段(Field)

awk假設輸入是有結構(可識別的結構化數據),這種結構不一定是一眼能看出來的

記錄:文件的每個輸入行作爲一條記錄

字段:由分割符(默認是空格和製表符)分割的單詞作爲字段

分隔符(Separation):用來分割字段的字

(6)字段的引用(quote)和分離

awk允許'字段操作符$'來指定字段

'$0':表示整個輸入記錄

'$1':表示第一個字段,其他依次類推

(7)逗號變空格

說明:print語句中分割每個參數的逗號使得輸出(OFS原因)各值之間有一個空格

腳本形式

備註:改變輸出用OFS即可! 

BEGIN指定'相關分割符'最好以""分割

(8)數值計算變量初次涉及

echo a b c | awk 'BEGIN{one=1;two=2}{print $(one+two)}'

# $n,n不一定要用整數,也可以用變量值代替

# 說明1-->第一部分:echo a b c 表示awk讀入一行,可以用''引起來

# 說明2-->第二部分:BEGIN做文件讀入前的初始化,print $(one+two)打印print $3即該記錄的第三個字段

(9)~ 操作符

說明:(~)操作符測試一個字段的正則表達式

補充

awk  -v FS=':'  '$3 ~ /^male$/{print $0}' test

wzj:18:male
wzj2:22:male

後記:關於寫不寫博客,糾結了很長時間,一方面太耗費精力,另一方面時間也不太允許,所幸經過掙扎,重新迴歸,希望大家多多批評,多多提問題,一塊進步!

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