1. 程式人生 > >【Linux】awk 命令詳解 01

【Linux】awk 命令詳解 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