Group Blog
 
<<
กรกฏาคม 2551
 
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
9 กรกฏาคม 2551
 
All Blogs
 

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
0 comments
Last Update : 10 กรกฎาคม 2551 11:17:29 น.
Counter : 1170 Pageviews.

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 
รหัสส่งข้อความ
กรุณายืนยันรหัสส่งข้อความ


Pong_Aslan
Location :


[ดู Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 1 คน [?]




Friends' blogs
[Add Pong_Aslan's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.