linux awk

awk是一門編程語言,被普遍適用於linux系統,主要用於簡單腳本分析統計
今天咱們就小試牛刀,實操awk
awk編程是以行爲單位處理文件,語法是'pattern { action }' 即:'模式 {動做}' 記住是單引號 雙引號要轉義 linux

前提:系統已經安裝awk,而且存在一個demo.txt文件以便咱們實踐,文件內容以下:
user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男git

1、入門使用github

輸出demo文件內容:
awk '{print $0}' demo.txt 

user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男

1)全部的pattern action 都在單引號內
2)這裏的{print $0} 爲action pattern爲空
3)awk會默認遍歷每行內容進行匹配執行。$0爲awk內置變量表明這行的全部內容。$1代碼第一列 $2表明第二列依次類推
4)awk默認會以空格和製表符爲分隔符來拆分每行內容。能夠用參數-F執行分隔符,如-F#表明用#分割這行內容
5)也能夠用linux管道方式如:cat demo.txt | awk '{print $0}'
6)awk內置不少經常使用變量,如NF(Number of Fileds),NR(Number of Records)等

2、pattern說明編程

輸出男生信息
awk '/男/ {print $0}' demo.txt

user1 10 男
user4 28 男
user5 90 男

1)這裏的 /男/ 就是pattern 能夠使用正則匹配 //是開始結束符.

輸出年齡大於20歲的信息
awk '$2>20 {print $0}' demo.txt

user4 28 男
user5 90 男

1)模式也能夠用判斷符號表示,如> < >= <= !=等等

輸出後再首行打印表頭 name age sex
awk 'BEGIN{print "name","age","sex"} {print $0}' demo.txt

name age sex
user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男

1)awk默認有BEGIN和END兩個模式符號,表明全部命令開始和結束執行
2)此處print逗號至關於分隔符空格

3、action說明編程語言

美化打印
1)awk支持printf格式化打印
awk '{printf("%s age is %d\n",$1,$2)}' demo.txt

user1 age is 10
user2 age is 20
user3 age is 18
user4 age is 28
user5 age is 90

支持編程語法if else while等
awk '{
 if ($3 == "男") printf("%s is a boy\n", $1)
 else printf("%s is a girl\n", $1)
}' demo.txt

4、 附加說明code

awk是一門編程語言,支持的內容遠遠不及此,更多語法請下載手冊參考:
https://github.com/colasjun/awk
相關文章
相關標籤/搜索