1. 程式人生 > >2018.1.17 6周3次課

2018.1.17 6周3次課

ims 正則 數學運算 amp tab sim 進行 邏輯 sof

六周第三次課(1月17日)

9.6/9.7 awk

awk也是流式編輯器,針對文檔中的行來操作,一行一行地執行。awk兼具sed的所有功能,而且更加強大。awk工具其實是很復雜的 (有專門的書來介紹它的應用), 對於初學者來說, 只要能處理日常管理工作中的問題即可。

  1. 截取文檔中的某個段

-F 選項的作用是指定分隔符,如果不加-F指定,則以空格或者tab為分隔符。 Print為打印的動作,用來打印出某個字段。$1為第一個字段,$2為第二個字段,依次類推,有一個特殊的那就是$0,它表示整行。

技術分享圖片

技術分享圖片

技術分享圖片

註意awk的格式,-F後緊跟單引號,然後裏面為分隔符,print的動作要用 { } 括起來,否則會報錯。print還可以打印自定義的內容,但是自定義的內容要用雙引號括起來。

技術分享圖片

  1. 匹配字符或字符串

技術分享圖片

可以讓某個段去匹配,這裏的’~’就是匹配的意思。

技術分享圖片

支持正則表達式,不要加脫義字符

技術分享圖片

awk還可以多次匹配,多個表達式一起寫

技術分享圖片

技術分享圖片

  1. 條件操作符

awk中是可以用邏輯符號判斷的,比如 ‘==’ 就是等於,也可以理解為 ‘精確匹配’ 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得註意的是,在和數字比較時,若把比較的數字用雙引號引起來後,那麽awk不會認為是數字,而認為是字符,不加雙引號則認為是數字。

技術分享圖片

想把uid大於等於1000的行打印出,但是結果並不是我們的預期,這是因為awk把所有的數字當作字符來對待了,就跟上一章中提到的 sort 排序原理一樣。

技術分享圖片

!= 為不匹配,除了針對某一個段的字符進行邏輯比較外,還可以兩個段之間進行邏輯比較。

技術分享圖片

技術分享圖片

技術分享圖片

另外還可以使用 && 和 || 表示 “並且” 和 “或者” 的意思

技術分享圖片

技術分享圖片

技術分享圖片

  1. awk的內置變量

awk常用的變量有:

OFS:和-F選項有類似的功能,也是用來定義分隔符的,但是它在輸出的時候定義。

NF:用分隔符分隔後一共有多少段。

NR:行數。

技術分享圖片

技術分享圖片

技術分享圖片

顯示行號:

技術分享圖片

顯示段數:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

  1. awk中的數學運算

=:賦值,賦值後分隔符就沒有了

技術分享圖片

可以用OFS定義分隔符

技術分享圖片

技術分享圖片

tot:求和

技術分享圖片


2018.1.17 6周3次課