認識 awk 命令列工具

簡介

awk 是一個基於命令列的文字處理器。基本用法如下。

1
awk '{[pattern] action}' {filenames}

使用

假設有一個 employee.txt 檔如下。

1
2
3
4
5
6
7
8
ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000

使用 print 陳述式將所有文字列印出。

1
awk '{print}' employee.txt

使用正則表達式,將包含 manager 字樣的文字列印出。

1
2
3
4
awk '/manager/ {print}' employee.txt
ajay manager account 45000
varun manager sales 50000
amit manager account 47000

使用 $1 變數和 $4 變數將第一欄和第四欄的文字列印出。

1
2
3
4
5
6
7
8
9
awk '{print $1,$4}' employee.txt
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000

使用內建變數 NR 將行數印出。

1
2
3
4
5
6
7
8
9
awk '{print NR, $0}' employee.txt
1 ajay manager account 45000
2 sunil clerk account 25000
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000
7 sunil peon sales 13000
8 satvik director purchase 80000

使用內建變數 NR 將第三行至第六行的文字列印出。

1
2
3
4
5
awk 'NR==3, NR==6 {print NR, $0}' employee.txt
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000

使用內建變數 NF 將第一欄和最後一欄的文字列印出。

1
2
3
4
5
6
7
8
9
awk '{print $1, $NF}' employee.txt
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000