Awk Script

Awk ย่อมาจากตัวอักษรแรกของนักพัฒนาทั้งสามคนได้แก่ Aho, Weinberger, และ Kernighan ถือว่าเป็นภาษาโปรแกรมชนิดหนึ่งซึ่งมีไว้สำหรับการเข้าถึงข้อมูลที่มีลักษณะเป็นโครงสร้าง (structured data) และสามารถสร้างออกมาให้อยู่ในรูปแบบรายงานได้ คุณสมบัติสำคัญของ awk ประกอบไปด้วย

  • awk จะมองไฟล์ข้อมูลในลักษณะคล้ายฐานข้อมูลที่มี เรคอร์ด (record) และ ฟิลด์ (field)

  • awk จะมีตัวแปร (variables) ชุดคำสั่งตรวจสอบเงื่อนไข (conditional statement) และชุดคำสั่งทำซ้ำ (loop statement) เหมือนภาษาโปรแกรมทั่วไป

  • awk เตรียมตัวดำเนินการทางด้านเลขคณิต (arithmetic) และข้อความ (string)

  • awk สามารถสร้างออกมาให้อยู่ในรูปแบบรายงานได้

รูปแบบคำสั่งการใช้งาน awk

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' file

โดยที่ search pattern ก็คือชุด regular expression ส่วน Actions ก็คือชุดคำสั่งเชิงโปรแกรม ดังตัวอย่างการใช้คำสั่งข้างล่าง

$ cat data.log 
1  Station01 Temp_Sensor 35.4
2  Station02 Flow_Sensor 12.4
3  Station03 Light_Sensor 55
4  Station04 Motion_Sensor ON
5  Station05 Current_Sensor 1.42

$ awk '/Station01/
> /Station02/' data.log 

1  Station01 Temp_Sensor 35.4
2  Station02 Flow_Sensor 12.4

awk สามารถแยกเรคคอร์ดในแต่ละบรรทัดที่คั่นด้วยอักขระช่องว่างออกมาเป็นฟิลด์ย่อยๆและถูกเก็บไว้ในตัวแปร $n โดยที่ n คือจำนวนเลขฟิลด์ โดยเริ่มต้นที่ $0 จะแทนด้วยข้อความทั้งหมดของบรรทัดนั้นๆ ส่วน $1 จนถึง $n นั้นจะเก็บข้อความที่ถูกแยกด้วยช่องว่างแต่ละคอลัมน์ ดังตัวอย่างข้างล่าง

$ awk '{print $2,$4;}' data.log 
Station01 35.4
Station02 12.4
Station03 55
Station04 ON
Station05 1.42

สามารถใช้ $NF เพื่อระบุค่าฟิลด์ตัวสุดท้ายได้ ดังตัวอย่างข้างล่าง

$ awk '{print $2,$NF;}' data.log 
Station01 35.4
Station02 12.4
Station03 55
Station04 ON
Station05 1.42

คำสั่ง awk จะมีรูปแบบสำคัญอีกส่วนหนึ่งที่ใช้ในการกระทำคำสั่งตอนเริ่มต้น (Initialization) ก่อนที่่จะเริ่มดำเนินการวิเคราะห์แต่ละบรรทัดภายในไฟล์ และจะกระทำคำสั่งตอนสิ้นสุด (Final) หลังจากบรรทัดสุดท้ายดำเนินการเสร็จเรียบร้อยแล้ว โดยการใช้ BEGIN และ END ดังรูปแบบการเรียกใช้คำสั่งดังนี้

BEGIN { Actions }
{Action} # Action for every lines in a file
END { Actions }
# is for comments in Awk

ตัวอย่างการใช้คำสั่ง awk แบบเต็มรูป

$ awk 'BEGIN {print "Station Name\tSensor Type\t\t\tValue";}
> {print $2,"\t",$3,"\t\t\t",$NF;}
> END{print "Report Generated\n--------------";
> }' data.log
Station Name Sensor Type Value
Station01  Temp_Sensor 35.4
Station02 Flow_Sensor 12.4
Station03  Light_Sensor 55
Station04 Motion_Sensor ON
Station05  Voltage_Sensor 1.42
Report Generated
--------------

เพื่อความสะดวกยิ่งขึ้น นักพัฒนาสามารถเก็บคำสั่งลงในไฟล์สคริปท์ได้ เช่น เก็บลงในไฟล์ datalog.script ตัวอย่างการใช้คำสั่งเช่น

$ cat datalog.script 
BEGIN {
print "Station Name\tSensor Type\t\t\tValue";
}
{
print $2,"\t",$3,"\t\t\t",$NF;
}
END {
print "Report Generated\n--------------";
}


$ awk -f datalog.script data.log 
Station Name Sensor Type       Value
Station01  Temp_Sensor  35.4
Station02  Flow_Sensor  12.4
Station03  Light_Sensor  55
Station04  Motion_Sensor  ON
Station05  Voltage_Sensor  1.42
Report Generated
--------------

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University