A Guided Tour Of Awk(ตอนแรก)
[1.1] AWK OVERVIEW Awk เป็น text-processing language ที่เป็นประโยชน์มาก ๆ ในการใช้งานต่าง ได้แก่ * การตรวจข้อมูลใน text file และสามารถสร้าง ไฟล์ ใหม่จากresult ที่ได้มา * สามารถเพิ่ม function ต่างของ text editors ซึ่งเหมือนกับ vi * สามารถแปลงไฟล์จาก format หนึ่ง ๆ ไปยัง format อื่น ๆ ได้ * สามารถสร้าง database ขนาดเล็ก ๆ ได้ * มีความสามารถในการคำนวณทางคณิตศาสตร์ได้ Awk มีสองหน้าที่ 1. สามารถทำงานใน simple text-processing tasks ได้ 2. สามารถทำงานใน complex text-processing tasks. ได้เช่นกัน
[1.2] AWK COMMAND-LINE EXAMPLES (ตัวอย่าง ง่าย ๆ ในการเข้าใจ Awk) เริ่มจากสร้างไฟล์ coins.txt ขึ้นมาโดยในไฟล์นี้มีข้อมูลดังนี้คือ
metal weight in ounces date minted country of origin description ใส่ข้อมูลดังนี้ครับ
gold 1 1986 USA American Eagle gold 1 1908 Austria-Hungary Franz Josef 100 Korona silver 10 1981 USA ingot gold 1 1984 Switzerland ingot gold 1 1979 RSA Krugerrand gold 0.5 1981 RSA Krugerrand gold 0.1 1986 PRC Panda silver 1 1986 USA Liberty dollar gold 0.25 1986 USA Liberty 5-dollar piece silver 0.5 1986 USA Liberty 50-cent piece silver 1 1987 USA Constitution dollar gold 0.25 1987 USA Constitution 5-dollar piece gold 1 1988 Canada Maple Leaf
เมื่อทำการสร้างไฟล์แล้วให้ลองพิมพ์คำสั่งนี้
awk '/gold/' coins.txt ผลลัพธิ์จะออกมามีหน้าตาเป็นแบบนี้ครับ
gold 1 1986 USA American Eagle gold 1 1908 Austria-Hungary Franz Josef 100 Korona gold 1 1984 Switzerland ingot gold 1 1979 RSA Krugerrand gold 0.5 1981 RSA Krugerrand gold 0.1 1986 PRC Panda gold 0.25 1986 USA Liberty 5-dollar piece gold 0.25 1987 USA Constitution 5-dollar piece gold 1 1988 Canada Maple Leaf
แต่ดังตัวอย่างแรก เราก็สามารถที่จะใช้คำสั่ง "grep" หรือ "find" บนlinuxได้เช่นกัน ลองใช้คำสั่งนี้ดู
awk '/gold/ {print $5,$6,$7,$8}' coins.txt ผลลัพธิ์ที่ได้เปลี่ยนไปจากเดิมครับ
American Eagle Franz Josef 100 Korona ingot Krugerrand Krugerrand Panda Liberty 5-dollar piece Constitution 5-dollar piece Maple Leaf
เหมือนเป็นการเพิ่มตัว condition เข้าไป
awk [search pattern] {[program actions]} อย่างในส่วนนี้"{print $5,$6,$7,$8}" จะเป็นการแสดงผลออกมาใน field ที่ 5,6,7,8
ถ้ายังไม่เข้าใจให้ดูโครงสร้างนี้ครับ สมมติให้ไฟล์ coins.txt มีโครงสร้าง(หรือเรียกว่า column ก็ได้)ดังนี้
metal weight in ounces date minted country of origin description ถ้าแบ่งตามfields แล้วก็จะได้ field variable ตามนี้เลยครับ
metal: $1 weight: $2 date: $3 country: $4 description: $5 จนถึง $8
ลองใหม่ ถ้าพิมพ์คำสั่ง
awk '{if ($3 < 1980) print $3, " ",$5,$6,$7,$8}' coins.txt ผลลัพธิ์จะแสดงออกมาดังนี้ครับ
1908 Franz Josef 100 Korona 1979 Krugerrand
สามารถที่จะสร้างเงื่อนไงในการตัดสินใจได้ "{if ($3 < 1980) print $3"
[1.3] AWK PROGRAM EXAMPLE มาดูส่วนในการเขียนโปรแกรมกัน ยังคงใช้ไฟล์ coins.txt ไฟลเดิมอยู่ คำสั่งก็คล้าย ๆ เดิม
awk -f [awk program file name] เราต้องการให้ output ที่แสดงออกมาเป็นหน้าตาเช่นนี้
Summary Data for Coin Collection: Gold pieces: nn Weight of gold pieces: nn.nn Value of gold pieces: n,nnn.nn
Silver pieces: nn Weight of silver pieces: nn.nn Value of silver pieces: n,nnn.nn
Total number of pieces: nn Value of collection: n,nnn.nn
โดยการสร้างไฟล์ที่มีชื่อว่า summary.awk เพิ่มมาโดยในไฟล์นั้นเขียนโปรแกรม Awk ลงไป # This is an awk program that summarizes a coin collection. # /gold/ { num_gold++; wt_gold += $2 } # Get weight of gold. /silver/ { num_silver++; wt_silver += $2 } # Get weight of silver. END { val_gold = 485 * wt_gold; # Compute value of gold. val_silver = 16 * wt_silver; # Compute value of silver. total = val_gold + val_silver; print "Summary data for coin collection:"; # Print results. printf ("n"); printf (" Gold pieces: %2dn", num_gold); printf (" Weight of gold pieces: %5.2fn", wt_gold); printf (" Value of gold pieces: %7.2fn",val_gold); printf ("n"); printf (" Silver pieces: %2dn", num_silver); printf (" Weight of silver pieces: %5.2fn", wt_silver); printf (" Value of silver pieces: %7.2fn",val_silver); printf ("n"); printf (" Total number of pieces: %2dn", NR); printf (" Value of collection: %7.2fn", total); }
เมื่อเขียนเสร็จแล้วทำการรันคำสั่งโดยใช้คำสั่งนี้
awk -f summary.awk coins.txt เมื่อรันคำสั่งเสร็จแล้ว output ที่ได้จะมีหน้าตาเป็นแบบนี้ครับ
Summary data for coin collection:
Gold pieces: 9 Weight of gold pieces: 6.10 Value of gold pieces: 2958.50
Silver pieces: 4 Weight of silver pieces: 12.50 Value of silver pieces: 200.00
Total number of pieces: 13 Value of collection: 3158.50
ซึ่งตรงกับความต้องการของเราเลย
ผมอาจจะเขียนไม่ละเอียด ยังไงก็ตามกรุณาเข้าไปดูในเวบลิ้งค์ภาษาอังกฤษเอานะคร้าบ
ขอขอบคุณ://www.vectorsite.net/tsawk_1.html#m1
Create Date : 09 กรกฎาคม 2551 |
Last Update : 10 กรกฎาคม 2551 11:17:29 น. |
|
0 comments
|
Counter : 2087 Pageviews. |
|
|