強大的文本處理工具之三awk
阿新 • • 發佈:2018-04-01
awk文本處理三劍客之三,功能十分強大
基本用法
基本用法
awk [opinions] ‘program‘ var=value file
awk [opinions] -f programfile var=value file
通常awk程序由:BEGIN語句塊、可使用模式匹配的通用語句塊、END語句塊組成
基本格式
awk [options] ‘program‘ file
Pattern和action
- pattern部分決定動作語句何時觸發以及觸發事件
BEGIN ,END -
action statements對數據進行處理,放在 { } 內指明
print ,printf
分隔符、域和記錄awk在執行時,由分隔符分隔的字段標記$1,$2,$3,$n稱為域表示,$0為所有域,即默認打印所有信息 文件的每一行稱為記錄 省略 action,即默認執行print $0 的操作
工作原理
- 執行BEGIN { action } 語句塊中的語句
- 從文件/標準輸入讀取第一行,然後執行pattern{ action ;…} 語句塊,逐行執行知道文件讀取完畢
-
當讀至輸入流末尾時,執行END{action;…}語句塊
基本選項:-F 指明輸入時用到的字段分隔符 // -v var=value 自定義變量[root@linux-centos7~]# awk -F: ‘{print}‘ /etc/passwd
上述語句執行結果為/etc/passwd文件中的所有內容,因為print沒有指定任何字段,默認打印所有內容[root@linux-centos7~]# awk -F: ‘{print $1,$7}‘ /etc/passwd
[root@linux-centos7~]# awk -v test=‘hello‘ BEGIN‘{print test}‘ /etc/passwd
上述語句執行結果只有一個hello,因為在awk裏面-v 賦值test為hello,print打印test變量的值,由於前面有BEGIN,故只輸出BEGIN語句塊執行結果,不會輸出和/etc/passwd文件行數一樣多的hello,因為在BEGIN之後沒有pattern語句
[root@linux-centos7~]# awk -v test=‘hello‘ BEGIN‘{print test}‘‘{print $1,$7}‘ /etc/passwd
強大的文本處理工具之三awk