Linux

Awk 語言指令

AWK是一種優良的文字處理工具,Linux及Unix環境中現有的功能最強大的資料處理引擎之一。

這種編程及資料操作語言的最大功能取決於一個人所擁有的知識。

AWK提供了極其強大的功能:可以進行正規表示式的匹配,樣式裝入、流控制、數學運算子、行程控制語句甚至於內建的變數和函式。

詳細介紹與範例

awk

基本用法,預設不寫分隔符的話是用空白或Tab來分隔
ps. ‘{print O, O, …}’ 單引號’ ‘、大括號{}、print 和 逗號, 缺一不可
Test File: testFile.txt 
A B C D
1 2 3 4

Example.1-1

awk '{print $1, $2, $4}' testFile.txt

Output
A B D
1 2 4

awk -F, or

awk –field

使用 , (逗號)當分隔符號,可替換成想要的分隔符號(預設不寫分隔符的話是用空白或Tab來分隔)
ps. 灰色部分自定義參數
Test File:  testFile.txt 
A: B, C/ D
1/ 2: 3, 4 

Example.2-1

awk -F: '{print $1, $2}' testFile.txt

Output
A B, C/ D
1/ 2 3, 4 


Example.2-2

awk -F/ '{print $1, $2}' testFile.txt

Output 
A: B, C/ D
1 2: 3, 4 

awk -va=O or

awk –asign va=O

輸入自訂的變數a, b (ex. a=O, b=X)
ps. 灰色部分自定義參數
Test File:  testFile.txt 

A: B, C/ D
1/ 2: 3, 4 

Example.3-1

awk -vb=1 -vc=5 '{print $1, $4, $1+b, $4+c}' testFile.txt

Output
A D 1 5
1 4 2 9 

awk -f script.awk or

awk –file script.awk

自定義的 script.awk 中讀取awk 命令
BEGIN //執行前
END //執行後
Test File:  calories.txt 

Sun   400 900 800
Mon   450 600 500
Tue   300 750 470
Wed   289 530 850
Thu   670 430 690
Fri   490 380 477
Sat   568 455 399 
Test File:   script.awk

#!/bin/awk -f
BEGIN {
sum = 0
daily_calories = 0
printf "Week Morning Noon Night Daily\n"
printf "--------------------------------\n"  }
{
daily_calories = $2+$3+$4
sum += daily_calories
printf "%s %d %d %d %d\n", $1, $2, $3, $4, daily_calories  }
END {
printf "--------------------------------\n"
printf "Weekly total calories: %d\n", sum  }
Example. 4-1

awk -f script.awk calories.txt

Output

Week     Morning     Noon     Night     Daily
Sun        400        900       800      2100
Mon        450        600       500      1550
Tue        300        750       470      1520
Wed        280        530       850      1660
Thu        670        430       690      1790
Fri        490        380       470      1340
Sat        560        450       390      1400

Weekly total calories: 11360 

Reference

Linux awk 命令

Comments Off on Awk 語言指令