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 ซึ่งมีข้อมูลเป็น
Screen Shot 2562-08-24 at 12.44.19.png
1. หากต้องการ print ข้อมูลทั้งหมดจะใช้คำสั่งเป็น
 awk '{ print }' employee.txt
Screen Shot 2562-08-24 at 12.46.04.png
2. หากต้องการหาแค่เฉพาะบรรทัดที่มีคำว่า manager จะใช้เป็น
awk '/manager/ {print}' employee.txt
Screen Shot 2562-08-24 at 12.48.24.png
3. ดึงข้อมูลเป็นแถวๆมาได้ เราสามารถจำแนกแถวของแต่ละไฟล์ได้ด้วย $1 (หมายถึงแถวที่ 2), $1 (หมายถึงแถวที่ 2) และไปเรื่อยๆ
awk '{ print $1,$4 }' employee.txt
Screen Shot 2562-08-24 at 13.09.00.png
นอกเหนือจาก $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
Screen Shot 2562-08-24 at 13.17.29.png
  • การแสดงผล field แรกและ field สุดท้ายจะใช้เป็น
awk ‘{ print $1,$NF }’ employee.txt
Screen Shot 2562-08-24 at 13.21.04.png
  • การแสดงผลบรรทัดที่ 3 ถึง 6 จะใช้คำสั่งเป็น
awk 'NR==3, NR==6 {print NR,$0 }' employee.txt
Screen Shot 2562-08-24 at 13.22.53.png
  • หากต้องการ print แถวแรกพร้อมกับใส่ line number และใส่ “- “ เข้าไปจะใช้คำสั่งเป็น
awk '{ print NR "- " $1 }' employee.txt
Screen Shot 2562-08-24 at 13.28.04.png
  • หาแถวที่ยาวที่สุดของไฟล์จะใช้คำสั่งเป็น
awk 'length > m { m = length; a = $0 } END { print a }' employee.txt
Screen Shot 2562-08-24 at 14.19.46.png
  • Print จำนวนแถวที่มีในไฟล์
awk 'END { print NR }' employee.txt
Screen Shot 2562-08-24 at 14.20.19.png
  • แสดงผลแถวที่ยาวมากกว่า 25 ตัวอักษรจะใช้เป็น
awk 'length($0) > 25' employee.txt
Screen Shot 2562-08-24 at 13.37.47.png
  • แสดงผลใน column ใดๆที่มีคำตามที่เรากำหนด
awk '{ if($3 == "account") print $0; }' employee.txt
Screen Shot 2562-08-24 at 13.40.20.png

Comments

Popular Posts