一、awk 的介紹
1.awk是一種報告生成器,格式化文本輸出
2.awk有多種版本:New awk(nawk),GNU awk(gawk)
3.gawk:主要用于模式掃描和處理語言
二、基本用法:
1. 三種基本的用法:
awk [options] ‘program’ var=value file…..
awk [options] -f programfile var=value file……
awk [options] ‘BEGIN{action;…}pattern{action;…} END{action;…}’ file…
2.各部分代表的意思
awk 程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊,共3部分組成
program通常是由被單引號或雙引號中所用的awk的語句
選項:
-F 指明輸入時使用到的字段分隔符
-v var=value:自定義變量
3.基本格式:
awk [options] ‘program’ file…
program :pattern{action statements;..}
pattern和action:
pattern部分決定動作語句何時觸發事件BEGIN,END
action statements對數據進行處理,放在{}內指明print,printf
4.分隔符、域和記錄:
awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱為域標識,$0為所有域。
文件的每一行稱為記錄
省略action,則默認執行print $0的操作
5.awk 的工作原理
第一步:執行BEGIN{action;… }語句塊中的語句
第二步:從文件或標準輸入(stdin)讀取一行,然后執行pattern{action;… }語句塊,它逐行掃描? ? ? ? ?? ? ? ? ?? ? ? 文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。
第三步:當讀至輸入流末尾時,執行END{action;…}語句塊 BEGIN語句塊在awk開始從輸入流? ? ? ? ? ? ? ? ? ? ? ?中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句 ? ? ? ? ? ? ? ? ? ? ? ?通 ??梢詫懺贐EGIN語句塊中
END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如打印所有行的分析結果這類信 ? ? ? ? ? ? ? ? ? ? 息匯總都是在END語句塊中完成,它也是一個可選語句塊
pattern語句塊中的通用命令是最重要的部分,也是可選的。如果沒有提供pattern語句塊,則默 ? ? ? ? ? ? ? ? ? ? ? 認執行{ print },即打印每一個讀取到的行,awk讀取的每一行都會執行該語句塊
6. print格式:print item1,item2,…
awk ‘{print “Hello, awk”}’
要點:
(1)逗號分隔符
(2)輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式
awk -F: ‘{print “wang”}’ /etc/passwd
(3)如省略item,相當于print $0
7. awk 變量
(1)? 內置變量:
FS:輸入字段分隔符,默認為空白字符
awk -v FS=”:” ‘{print $1,FS,$3}’ /etc/passwd
OFS:輸出字段分隔符,默認為空白字符
awk -v FS=’:’ ?-v OFS=’:’ ‘{print $1,$3,$7}’ ?/etc/passwd
RS:輸入記錄分隔符,指定輸入時的換行符
awk -v RS=’ ‘ ‘{print }’ /etc/passwd
ORS:輸出記錄分隔符,指定輸入時的換行符
awk -v RS=’ ‘ -v ORS=’###”{print }’ /etc/passwd
NF:字段數量
awk -F: ‘{print NF}’ /etc/fstab
NR:記錄號
awk ‘{print NR}’ ?/etc/fstab
FNR:各文件分別計數,記錄號
awk ‘{print FNR}’ ?/etc/fstab ?/etc/inittab
FILENAME:當前文件名
awk ‘{print FILENAME}’ /etc/fstab
(2)自定義變量(區分字符大小寫)
-v var=value? ? ? ? ? ? ? ? ?
在program中直接定義
8.printf命令
格式化輸出:printf “FORMAT”,item1,item2, …
(1) 必須指定FORMAT
(2) 不會自動換行,需要顯式給出換行控制符,\n
(3) FORMAT中需要分別為后面每個item指定格式符
格式符:與item一一對應
%c: 顯示字符的ASCII碼
%d, %i: 顯示十進制整數
%e, %E:顯示科學計數法數值
%f:顯示為浮點數
%g, %G:以科學計數法或浮點形式顯示數值
%s:顯示字符串
%u:無符號整數
%%: 顯示%自身
修飾符:
#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點后精度,%3.1f
-: 左對齊(默認右對齊) %-15s
+:顯示數值的正負符號 %+d
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90762