Skip to content

Latest commit

 

History

History
70 lines (52 loc) · 3.48 KB

awk.md

File metadata and controls

70 lines (52 loc) · 3.48 KB

AWK เพื่อใช้ในการ รวม ค่า ( เน้น เฉพาะชื่อ เดี่ยวกัน ยากมาก )

awk เป็นคำสั่งที่ วิเศษฐมากๆ ในการทำงาน ของระบบ unix ซึ่ง มีใน ลีนุกซ์ ด้วย โดย ที่สามารถนำมา แทนพวก sed grep อีกหลายๆๆ อย่าง

จากกรณีตัวอย่างนี้ ต้องการ ทำการรวมข้อมูล เฉพาะชื่อของบุคคล นั้นๆ ยากมากๆ ถ้าเขียน โดยไม่ใช่ awk

ตัวอย่าง ไฟล์ หนึ่ง มีข้อมูลดังต่อไปนี้ ไฟล์ชื่อว่า check

Alex,147,1
Brian,056,7
Nanda,559,2
Lisa,221,0
Nanda,268,2
Alex,200,5
Brian 1 56 7

ความหมายคือ ทำการ หาชื่อ ออกมา (ซ้ำกันก็ เอาแค่ ชื่อเดียว ) ทำการ รวม ค่า แต่ละ ชื่อ และทำการตรวจสอบด้วยว่า ในค่าต่างๆๆ มีชื่อซ้่ำกัน กี่ ครั้ง เช่น

Alex 3 755 14 หมาถึง ชื่อ Alex จำนวน ค่า มีด้วยกัน 3 ค่า และผลรวมของค่า filed ที่ 2 คือ 755 และ filed ที่ 3 คือ 14

นั่นเอง

ถ้าไม่ต้องการ จำนวนครั้งของการซ้้ำใช้คำสั่งนี้

awk -F “,” ‘{a[$1]+=$2; b[$1]+=$3 } END {for (i in a) print i,a[i],b[i]}’ check

จะออกมาดังนี้

Nanda 827 4
Lisa 221 0
Alex 755 14
Brian 56 7

หรือใช้อีกแบบ หนึ่ง

awk -F “,” ‘{a[$1]+=$2; b[$1]+=$3 } END {for (i in b) print i,a[i],b[i]}’ check

จะออกมาดังนี้

Nanda 827 4
Lisa 221 0
Alex 755 14
Brian 56 7

ซึ่ง ผลลัพท์ออกมาเหมือนกันครับ อาไว้ดูเป็นแนวทางได้เป็นอย่างดีทีเดียว ครับ …

แปล ความหมาย และนำมาใช้งาน โดย นาย เอกภพ อินทมาตร์ ครับ

เช่นตัวอย่าง แบบนี้

มี ip address และ bytes ต่อด้วย ip gateway มาดังนี้ ผมมีความต้องการ จะเรียง ip ซึ่ง จริงๆแล้ว มี ip เพียง 2 ip เท่านั้นที่ ไม่เหมือนกัน และ เมื่อ เรียงได้แล้วทำการ รวม ค่า ของ field ที่ 2 ก็จะออกมาเป็นดังนี้

เห็นมั้ยครับ ว่ามัน ง่าย ดาย มาก เลย ครับผม

อันนี้เป็น video นะครับ มันทำงาน เร็วมาก

Thank you and Credit:

[https://sites.google.com/site/mcuellarweb/howtos/admin/unix/awk-sum-count-and-average-with-arrays] [http://pfspot.ddns.net/wordpress/?p=286]