【Linux】awk 命令詳解 01
阿新 • • 發佈:2019-01-01
文章目錄
一、awk 介紹
AWK是一種處理文字檔案的語言,是一個強大的文字分析工具。
之所以叫AWK是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字元。
awk 功能非常強大,幾乎相當於一門程式語言了,要學習的內容也非常多,本文先從最簡單最常用的部分開始說起。
二、語法格式
awk [選項引數] 'script' var=value file(s)
或
awk [選項引數] -f scriptfile var=value file(s)
選項 | 第二種寫法 | 引數說明 |
---|---|---|
-F ‘fs’ | -F 相當於內建變數 FS,即 field-separator | -F 指定檔案的分隔符,fs是一個字串或者正則表示式,可以加引號也可以不加(最好加上單引號); 預設不帶 -F 引數時,使用空格或製表符等空白字元做為分隔符。 |
-v var=value | –asign var=value | 賦值一個使用者定義變數 |
-f scripfile | –file scriptfile | 從指令碼檔案中讀取awk命令 |
三、基本用法
log.txt文字內容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
例項:
1、每行按空格或TAB分割,並輸出文字中的第1、4項
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
2、格式化輸出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
3、awk -F 指定分割字元
3.1 使用 ,
分割
- -F 和分隔符之間可以有空格也可以沒有,分隔符可以加單引號或雙引號,也可以不加。
- 建議最好是 -F 和分隔符之間有一個空格,並給分隔符加單引號,不容易出錯。
# 文字中沒有分隔符字元,所以 $1 就是全部文字,$2 是空。
$ awk -F ',' '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
3.2 使用 a
分割
$ awk -F 'a' '{print $1}' log.txt
---------------------------------------------
2 this is
3 Are you like
This's
10 There
3.3 使用多個分隔符
先使用空格分割,然後對分割結果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
4、awk -v 設定變數
常用語法:
awk -v var=value '{print $1,$2}' filename
4.1 定義一個變數,並在輸出時對變數進行運算
數字與數字運算,結果正常;
數字與字串運算,只保留數字。
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
4.2 定義多個變數,並在輸出時對變數進行運算
數字與數字運算,結果正常;
數字與字元運算,只保留數字;
字元或數字與字元拼接;
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
-----------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
5、awk -f 指定指令碼
常用語法:
awk -f {awk指令碼} {檔名}
$ awk -f cal.awk log.txt