2018.1.17 6周3次課
9.6/9.7 awk
awk也是流式編輯器,針對文檔中的行來操作,一行一行地執行。awk兼具sed的所有功能,而且更加強大。awk工具其實是很復雜的 (有專門的書來介紹它的應用), 對於初學者來說, 只要能處理日常管理工作中的問題即可。
截取文檔中的某個段
-F 選項的作用是指定分隔符,如果不加-F指定,則以空格或者tab為分隔符。 Print為打印的動作,用來打印出某個字段。$1為第一個字段,$2為第二個字段,依次類推,有一個特殊的那就是$0,它表示整行。
註意awk的格式,-F後緊跟單引號,然後裏面為分隔符,print的動作要用 { } 括起來,否則會報錯。print還可以打印自定義的內容,但是自定義的內容要用雙引號括起來。
匹配字符或字符串
可以讓某個段去匹配,這裏的’~’就是匹配的意思。
支持正則表達式,不要加脫義字符
awk還可以多次匹配,多個表達式一起寫
條件操作符
awk中是可以用邏輯符號判斷的,比如 ‘==’ 就是等於,也可以理解為 ‘精確匹配’ 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得註意的是,在和數字比較時,若把比較的數字用雙引號引起來後,那麽awk不會認為是數字,而認為是字符,不加雙引號則認為是數字。
想把uid大於等於1000的行打印出,但是結果並不是我們的預期,這是因為awk把所有的數字當作字符來對待了,就跟上一章中提到的 sort 排序原理一樣。
!= 為不匹配,除了針對某一個段的字符進行邏輯比較外,還可以兩個段之間進行邏輯比較。
另外還可以使用 && 和 || 表示 “並且” 和 “或者” 的意思
awk的內置變量
awk常用的變量有:
OFS:和-F選項有類似的功能,也是用來定義分隔符的,但是它在輸出的時候定義。
NF:用分隔符分隔後一共有多少段。
NR:行數。
顯示行號:
顯示段數:
awk中的數學運算
=:賦值,賦值後分隔符就沒有了
可以用OFS定義分隔符
tot:求和
2018.1.17 6周3次課