awk基礎
簡介
AWK是一種優良的文本處理工具。它是 Linux 中也是任何環境中現有的功能最強大
的數據處理引擎之一,相比sed常常作用于一整行的處理,awk比較傾向于將一行分成數
個“字段”來處理。所以,awk相當適合處理小型的數據處理。
基礎用法
awk[選項] ‘program’ var=value file…
awk[選項] -f programfilevar=value file…
awk[選項] 'BEGIN{ 動作;… } pattern{ 動作;… } END{ 動作;… }' file ...
-
awk程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊,共3部分組成
-
program通常是被單引號或雙引號中
示例
- awk主要是處理每一行的字段內的數據,而默認的字段的分隔符為空格鍵或[TAB]鍵。舉例說明,我們用cat /etc/passwd這個可以查看用戶:
- 若我想取出用戶名稱和shell類型,且名稱與shell類型以冒號隔開,則成這樣:
awk -F: '{print $+1":"$7} ' /etc/passwd
-
這是awk最常用的動作,通過print的功能將字段數據列出來,字段的分割可以自己選擇 以什么方式隔開,-F指定域分隔符為’:’。
系統變量
- OFS 輸出字段分隔符,默認為空白字符
- FS 輸入字段分隔符,默認為空白字符
- ORS 輸出記錄分隔符,輸出時用指定符號代替換行符
- RS 輸入記錄分隔符,指定輸入時的換行符,原換行符仍有效
- NF 每一行的字段數量
- NR 行數
- FNR 各個文件分別計數,行數
- ARGC 命令行的參數個數
- ARGV 數組,保存的是命令行所給定的各參數
- FILENAME 當前文件名
此外,$0變量是指整條記錄,$1表示當前行的第一個域,$2表示當前行的第二個域,……以此類推。
自定義變量(區分字符大小寫)
-
-v var=value
-
在program中直接定義
兩種方法:
VAR=10000;echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
var1="aaa";var2="bbb";echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
選項參數
- -F
指明輸入時用到的字段分隔符 。
- -v var=value
自定義變量。
要點
- 逗號分隔符
- 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式
- 如省略item,相當于print $0
printf命令
格式化輸出:
printf“FORMAT”, item1, item2, ...
- 必須指定FORMAT
- 不會自動換行,需要顯式給出換行控制符,
- FORMAT中需要分別為后面每個item指定格式符
格式符
- %c 顯示字符的ASCII碼
- %d 顯示十進制整數
- %i 顯示十進制整數
- %e 顯示科學計數法數值
- %E 顯示科學計數法數值
- %f 顯示為浮點數
- %g 以科學計數法或浮點形式顯示數值
- %G 以科學計數法或浮點形式顯示數值
- %s 顯示字符串
- %u 無符號整數
-
%% 顯示%自身
awk -F: '{printf"%s",$1}' /etc/passwd
修飾符
- /#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點后精度,%3.1f
- -: 左對齊(默認右對齊)%-15s
-
+:顯示數值的正負符號%+d
awk -F: '{printf "%-20s %10d\n",$1,$3}' /etc/passwd
awk -F: '{printf "Username:%-15s,UID:%d\n",$1,$3}' /etc/passwd
原創文章,作者:Az2h1丶,如若轉載,請注明出處:http://www.www58058.com/81522