AWK COMMAND
AWK COMMAND
Awk ถือเป็น script language อันหนึ่ง ซึ่งใช้เพื่อเปลี่ยนแปลงข้อมูลและสร้าง report ได้ โดย awk command เป็นตัวที่ช่วยได้มากในการจัดการข้อมูลในลักษณะต่างๆ ไม่ว่าจะเป็น
- การ scan file แบบบรรทัดต่อบรรทัด
- การแยกข้อความในแต่ละ line ให้เป็น field
- การเปรียบเทียบระหว่าง input และ field กับ pattern
- กระทำใดๆกับข้อความที่ตรงกับเงื่อนไข
โดย syntax จะใช้เป็น
awk options 'selection _cDriteria {action }' input-file > output-file
ยกตัวอย่างการใช้งาน awk
การใช้งานของ awk จะคล้ายกับ grep ในบางส่วน โดยในที่นี้จะมีการสร้างไฟล์ขึ้นมาเป็น employee.txt ซึ่งมีข้อมูลเป็น
1. หากต้องการ print ข้อมูลทั้งหมดจะใช้คำสั่งเป็น
1. หากต้องการ print ข้อมูลทั้งหมดจะใช้คำสั่งเป็น
awk '{ print }' employee.txt
2. หากต้องการหาแค่เฉพาะบรรทัดที่มีคำว่า manager จะใช้เป็น
awk '/manager/ {print}' employee.txt
3. ดึงข้อมูลเป็นแถวๆมาได้ เราสามารถจำแนกแถวของแต่ละไฟล์ได้ด้วย $1 (หมายถึงแถวที่ 2), $1 (หมายถึงแถวที่ 2) และไปเรื่อยๆ
awk '{ print $1,$4 }' employee.txt
นอกเหนือจาก $1, $2, $3 ที่กล่าวมา awk นั้นมีตัวแปรอื่นๆด้วย
- NR เป็นจำนวน line ของ input
- NF เป็น field สุดท้าย
- FS เป็นตัวอักษรที่ใช้ในการแยก field ซึ่งโดยปกติจะใช้เป็น ‘ ‘(space)
- RS เป็นตัวเก็บการแบ่ง record โดยปกติจะเป็นขึ้นบรรทัดใหม่
- OFS เป็นตัวแยกตอนแสดงผลลัพธ์ ซึ่งปกติจะเป็น ‘ ‘(space)
- ORS เป็นตัวแยกตอนแสดงผลลัพธ์ของแต่ละ record ซึ่งปกติคือการขึ้นบรรทัดใหม่
เช่น
- การแสดงผลแต่ละบรรทัดด้วย NR จะใช้คำสั่งเป็น
awk '{ print NR, $0}’ employee.txt
- การแสดงผล field แรกและ field สุดท้ายจะใช้เป็น
awk ‘{ print $1,$NF }’ employee.txt
- การแสดงผลบรรทัดที่ 3 ถึง 6 จะใช้คำสั่งเป็น
awk 'NR==3, NR==6 {print NR,$0 }' employee.txt
- หากต้องการ print แถวแรกพร้อมกับใส่ line number และใส่ “- “ เข้าไปจะใช้คำสั่งเป็น
awk '{ print NR "- " $1 }' employee.txt
- หาแถวที่ยาวที่สุดของไฟล์จะใช้คำสั่งเป็น
awk 'length > m { m = length; a = $0 } END { print a }' employee.txt
- Print จำนวนแถวที่มีในไฟล์
awk 'END { print NR }' employee.txt
- แสดงผลแถวที่ยาวมากกว่า 25 ตัวอักษรจะใช้เป็น
awk 'length($0) > 25' employee.txt
- แสดงผลใน column ใดๆที่มีคำตามที่เรากำหนด
awk '{ if($3 == "account") print $0; }' employee.txt
Comments
Post a Comment