[awk 練習] 改變 AWK 切割欄位的方式 & 使用者定義函數

【改變 AWK 切割欄位的方式 & 使用者定義函數】
$ vim reformat3.awk
BEGIN {
{ “date” | getline
print “Today is: “, $2, $3 > “today_rpt3”
print “====================” > “today_rpt3”
print “ID Number    Arrival Time” > “today_rpt3”
close(“today_rpt3″)
}
{ FS=”[ t:]+”
sys_call = “sort -n >> today_rpt3”
}
}

{    arrival = HM_to_M($2, $3)
total += arrival
printf(“%6s      %2s:%2s %sn”, $1, $2, $3, arrival > 480 ? “–” : “”) | sys_call
}

END {
close(“today_rpt3”)
close(sys_call)
printf(“Average arrival time = %d:%dn”, total/NR/60, (total/NR)%60) >> “today_rpt3”
}

function HM_to_M(hour, min) {
return hour * 60 + min
}
-> vim 命令模輸入 “:wq” (存檔離開)

(繼續閱讀…)

[awk 練習] AWK 中如何利用系統資源

【AWK 中如何利用系統資源】
$ vim reformat2.awk
BEGIN {
“date” | getline
printf(“Today is %s %d 日n”, $2, $3) > “today_rpt2”
print “=========================” > “today_rpt2”
print “ID Number   Arrival Time” > “today_rpt2”
close(“today_rpt2”)
}
{ printf(“%6s %10sn”, $1, $2) | “sort -n >> today_rpt2” }
-> vim 命令模輸入 “:wq” (存檔離開)

(繼續閱讀…)

[awk 練習] 列印檔案中指定的欄位資料並加以計算

【列印檔案中指定的欄位資料並加以計算】
$ vim emp.txt
A125 Jenny 100 210
A341 Dan 110 215
P158 Max 130 209
P148 John 125 220
A123 Linda 95 210
-> vim 命令模輸入 “:wq” (存檔離開)

$ vim pay1.awk
{ print $2, $3 * $4 }
-> vim 命令模輸入 “:wq” (存檔離開)

$ awk -f pay1.awk emp.txt
Jenny 21000
Dan 23650
Max 27170
John 27500
Linda 19950

$ vim pay2.awk{ printf(“%6s Work hours: %3d Pay: %5dn”, $2, $3, $3 * $4) }
-> vim 命令模輸入 “:wq” (存檔離開)

$ awk -f pay2.awk emp.txt
Jenny Work hours: 100 Pay: 21000
Dan Work hours: 110 Pay: 23650
Max Work hours: 130 Pay: 27170
John Work hours: 125 Pay: 27500
Linda Work hours:  95 Pay: 19950

【資料參考來源】

awk 筆記

【資料整理】
範例: emp.txt
A125 Jenny 100 210
A341 Dan 110 215
P158 Max 130 209
P148 John 125 220
A123 Linda 95 210

名詞:
(1)資料列: AWK從資料檔上讀取資料的基本單位,一般而言, 一筆資料列相當於資料檔上的一行資料, ex: A125 Jenny 100 210
(2)欄位(Field) : 為資料列上被分隔開的子字串,一般是以空白字元來分隔相鄰的欄位, ex: A125

(繼續閱讀…)

sort 指令

# sort [-fbMnrtuk] [file or stdin]

選項與參數:
-f  :忽略大小寫的差異,例如 A 與 a 視為編碼相同;-b  :忽略最前面的空白字元部分;
-M  :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『純數字』進行排序(預設是以文字型態來排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的資料中,僅出現一行代表;
-t  :分隔符號,預設是用 [tab] 鍵來分隔;
-k  :以那個區間 (field) 來進行排序的意思

(繼續閱讀…)