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
Was this helpful?