Download
1 / 65

A Brief history - PowerPoint PPT Presentation


  • 60 Views
  • Uploaded on

A Brief history. Alfred V, Aho, Peter J. Weinberger, และ Brian W. Kernighan ได้สร้าง awk ในปี 1977 โดยได้ชื่อมาจากตัวขึ้นต้นของชื่อของทั้งสามคน โดยบุคคลทั้งสามก็มาจากกลุ่มคนที่พัฒนา UNIX และ C โดยจะสามารถเห็น ไวยากรณ์ที่คล้ายคลึงกับ C ได้ใน awk. Introduction to Awk.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' A Brief history' - huy


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

ABrief history

Alfred V, Aho, Peter J. Weinberger, และ Brian W. Kernighan ได้สร้าง awk ในปี 1977 โดยได้ชื่อมาจากตัวขึ้นต้นของชื่อของทั้งสามคน โดยบุคคลทั้งสามก็มาจากกลุ่มคนที่พัฒนา UNIX และ C โดยจะสามารถเห็น ไวยากรณ์ที่คล้ายคลึงกับ C ได้ใน awk


Introduction to Awk

  • awk คือภาษาโปรแกรมสำหรับประมวลผลแฟ้มข้อมูลที่ถูกออกแบบมาสำหรับการสร้างข้อมูลทั่วไปและใช้กับงานที่ใช้ในการดึงข้อความ ซึ่งง่ายสำหรับการใช้และการทำงาน โดย awk สามารถทำดังนี้คือ

    • ทำรายงาน

    • การทำ pattern matching

    • การตรวจสอบข้อมูล

    • กรองข้อมูล


Program Structure

awk โปรแกรมจะมีลักษณะเป็นชุดคำสั่ง ดังนี้

Pattern {Action}

Pattern {Action}

. . .

- awk จะทำงานกับชุดข้อมูลของแฟ้มข้อมูลเข้า โดยทำงานใน ในรูปแบบ record และ field

- เราสามารถละการเขียน pattern และ action ได้


Lexical Units

Awk โปรแกรมจะประกอบด้วย กลุ่มของอักขระที่เรียกว่าtokens ดังนี้

- Numeric constants

- String Constants

- Keyword

- Identifiers

- Operators

- Record and Fields

- Comment

- Token used for grouping


Lexical Units

Numeric constants

เป็นชุดของตัวอักขระที่เป็นตัวเลข มีค่าเป็นจำนวนเต็มและทศนิยม โดยทศนิยมเขียนได้ดังนี้คือ

เช่น 1.2 0.12 หรือ 1.2e2

String constants

เป็นชุดของตัวอักขระที่เป็นตัวอักษร และ ตัวเลข มีค่าเป็น ล้อมรอบด้วย “ “ ถ้าต้องการพิมพ์ “ ให้ใช้ \“

เช่น “hello”



Lexical Units

Identifier

เป็นชุดของตัวอักขระที่เป็นตัวอักษร ตัวเลขและเครื่องหมายขีดเส้นใต้ (underscore) ใช้สำหรับเป็นตัวแปร หรือ array โดยชื่อต้องขึ้นต้นด้วยตัวอักษรหรือ _ เช่น var1 หรือ _var1 ตัวอักษรตัวใหญ่และตัวเล็กความหมายไม่เหมือนกัน เช่น Var1 และ var1


Lexical Units

Operators

awk มี operator ให้ใช้ได้ดังนี้

- Assignment operators

- Arithmetic operators

- relational operators

- logical operator

- Regular expression matching operators


Lexical Units

Assignment operators


Lexical Units

Arithmetic operators


Lexical Units

Relational operators


Lexical Units

Logical operators

Regular expression matching operators


Lexical Units

Record and Fields token

$0 : ตัวแปรเก็บค่า record นั้น

$i : ตัวแปรเก็บค่า ของ field ที่ i

เช่น Sunti Chotkaew 4322066

$0 = Sunti Chotkaew 4322066

$1 = Sunti , $2 = Chotkaew , $3 = 4322066

ตัวแปรพิเศษที่เกี่ยวข้อง

NF : ตัวแปรเก็บค่า จำนวน field ใน record นั้น

$NF : ตัวแปรเก็บค่า field สุดท้ายใน record นั้น

NR : ตัวแปรที่เก็บค่าจำนวน record ขณะนั้น


Lexical Units

Comment

การเขียน comment จะใช้เครื่องหมาย # นำหน้าส่วนที่จะ comment ไปจนจบบรรทัด

Token used for grouping

แต่ละ token ใน awk จะถูกแบ่งด้วย blank , tabs หรือ newline หรือเครื่องหมายอื่น เช่น

{ … } ใช้ล้อมรอบ Action

/ … / ใช้ล้อมรอบ Pattern

“ … “ ใช้ล้อมรอบ String


Primary expression

ใน action และ pattern ของ awk ถูกสร้างมาจาก block ของ expression ซึ่งประกอบขึ้นด้วย expression ต่อไปนี้

- Numeric constants

- String constant

- variables

- Function

โดย expression ข้างต้นสามารถให้ค่า ได้ทั้งตัวเลข และ string อย่างใดอย่างหนึ่ง


Primary expression

Numeric Constant

ตารางตัวอย่างค่าของค่าคงที่


Primary expression

String Constant

ตารางตัวอย่างค่าของค่าคงที่


Primary expression

Variables

มีรูปแบบดังนี้

identifiers ตัวแปรธรรมดา

identifier[expression]ตัวแปร array

$Termตัวแปรอ้างถึง record ข้อมูล


Primary expression : variables

$Term

- Term เป็นค่าตัวเลขที่มีค่ามากกว่า 0 อ้างถึง field ที่ i

- ให้ i เป็นค่ามากที่สุดของ term

ถ้า i < 0 และ i > 100 awk จะตรวจสอบ error

ถ้า NF < i < 100 $i จะเป็นตัวแปรที่ยังไม่กำหนดค่า

- การเข้าถึง $i ที่ i > NF จะไม่ทำให้ค่า NF เปลี่ยน


Primary expression

Function

awk มี function ให้ใช้ คือ arithmetic และ String Function



Term

สำหรับการทำงานทางคณิตศาสตร์ จะนำเอา expression มาทำการสร้างกลุ่มของ ไวยากรณ์ที่มีขนาดใหญ่เรียกว่า term โดยมีรูปแบบดังนี้

Primary expression

term binop term

unop term

incremented variable

(term)


Term

Binary term

อยู่ในรูป

term binop term

binop : + , - , * , / , %

Unary term

อยู่ในรูป

unop term

unop : + , -


Term

Incremented variable

เป็น term ที่มีรูปแบบ และค่าดังนี้

รูปแบบ ค่า ผลลัพธ์

++ var var + 1 var = var + 1

-- var var - 1 var = var - 1

var ++ var var = var + 1

var -- var var = var - 1

Parenthesized term

ใช้ในการ group term


Expression

Expression มีรูปแบบดังนี้

term

term term ...

var asgnop expression

concatenation of term

ในรูปแบบของ term

term1 term2 …

ค่าของ string จะถูกนำมา concatenate กันดังตัวอย่าง

1+2 3+4 = 37


Expression

Assignment expression

รูปแบบของ

var asgnop expression

เมื่อ asgnop : = ,+= , -= , *= , /= , %=

รูปแบบ

var = op expression

สมนัยกับ var = var op expression

เมื่อ op : = , + , _ ,* , / , %

และ asgnop เป็น right association


Using awk

เราจะอธิบายการใช้งาน awk ตามหัวข้อดังนี้

- Input and output

- Pattern

- Action

- Special feature


Using awk

Input and output

เราสามรถเขียน awk programได้สองวิธีคือ

1. Command line มีรูปแบบดังนี้

awk ‘program’ file1

โดยที่จะรับ program มาเป็น argument แรกของ awk โดยที่เราใช้ ‘ ‘ เพื่อให้แน่ใจว่า program จะเป็น argument แรกของ awk

ตัวอย่างเช่น

awk ‘/x/ {print}’ file1


Using awk : Input and output

2. เราสามารถเขียน awk program ไว้ใน file ได้เมื่อ program ของเรามีขนาดยาว และเรายังสามารถนำ เอากลับมาใช้ใหม่ได้ เช่น เก็บไว้ใน awkprog เรา เรียกโดยการใช้ option -f โดยสามารถเรียกใช้ดังนี้

awk -f awkprog file1


Using awk : Input and output : Input

Input : Record and Fields

awk จะอ่าน input ขึ้นมาหนึ่ง record โดยจบด้วย new line character หรือ EOF โดยจะให้ค่าที่อ่านมาได้ไปที่ $0

awk จะทำการแบ่ง record ที่อ่านได้แบ่งออกเป็น fields โดยแบ่งด้วย blank หรือ tabs

หมายเหตุ เราสามารถทำการเปลี่ยน อักขระสำหรับทำหน้าที่เป็นตัวแบ่ง record และแบ่ง Fields ได้


Using awk : Input and output : Input

  • Sample input file : countries

    • Russia 8650 262 Asia

    • Canada 3852 24 North America

    • China 3692 866 Asia

    • USA 3615 219 North America

    • Brazil 3286 116 South America

    • Australia 2968 14 Australia

    • India 1269 637 Asia

    • Argentina 1072 26 South America

    • Sudan 968 19 Africa

    • Algeria 920 18 Africa


Using awk : Input and output : Input : sample input file

จากตัวอย่างเราใช้ blank หนึ่งตัวในการขั้นระหว่าง North กับ America ทำให้เมื่อเราใช้ blank หรือ tab ในการแบ่ง field เราจะได้แต่ละ record มี 4 หรือ 5 fileds ไม่เท่ากันทุก record

เมื่อต้องการพิมพ์ค่า เราอาจใช้ program ดังนี้

{ print $0 }

สำหรับ field ต่าง ๆ จะถูกให้ค่า ไปที่ $1 , $2 , $3 และ $4 … ตามลำดับ


Using awk : Input and output : Input

Input : from command line

ใน awk program เราสามารถประกาศตัวแปรได้ทันที เช่น

x = 5

และเขียนเป็นคำสั่ง

awk ‘{print x}’ x=5 -

เป็นการกำหนดค่า x โดยให้ x=5 และรับ input จาก standard input โดยใช้เครื่องหมาย - แทนการรับจาก file ข้อมูล


Using awk : Input and output : Input : from command line

เราสามารถเปลี่ยนค่าของ RS (Record separator) และ FS (Field separator) โดยการคำสั่งจาก command line ดังนี้

awk -f awkprog RS = “;” file1

หรือ

awk -F; -f awkprog file1


Using awk : Input and output : Output

Output : Printing

จากแฟ้มข้อมูลตัวอย่าง เราสามารถพิมพ์ ค่าออกมาโดยใช้ program ต่อไปนี้

awk ‘{print $1,$2 ,$3}’ countries

ส่วน semicolon เราจะใช้ในการแบ่งคำสั่งดังนี้

{x = 5 ; print x }

( ... ) ใช้ในการจัดกลุ่ม เช่น

{print ($1,$2)}


Using awk : Input and output : Output

เราสามารถใช้ตัวแปรพิเศษในการพิมพ์ output ออกมาได้เช่น

NR เก็บค่าจำนวนชอง record ขณะนั้น

NF เก็บค่า จำนวนของ fileds ใน record นั้น

ตัวอย่างการใช้งานเช่น

{ print NR , NF , $0 }


Using awk : Input and output : Output

และ

OFS เก็บอักขระที่ใช้ในการแบ่ง field ที่เป็นผลลัพธ์

ปกติจะมีค่าเป็น blank

ORS เก็บอักขระที่ใช้ในการแบ่ง record ที่เป็นผล ลัพธ์ ปกติจะเป็น newline charecter

ตัวอย่างการใช้งานเช่น

{ x= “hello” ; y=“, world”

print x ,y }

ผลที่ได้คือ

hello, world


Using awk : Input and output : Output

Output : to Different file

awk อนุญาตให้มีการส่งผลลัพธ์ไปยัง file ได้โดยสามารถเขียนคำสั่งดังนี้

print > “filename”

โดยสามารถทำการเปิดได้สูงสุด 10 file เท่านั้น

ตัวอย่างเช่น

{ if ($4 == “Asia”) print > “ASIA”

if ($4 == “Europe”) print > “EUROPE”

if ($4 == “North”) print > “NORTH_AMERICA”

if ($4 == “South”) print > “SOUTH_AMERICA”

if ($4 == “Africa”) print > “AFRICA”

}


Using awk : Input and output : Output

Output : to Pipes

เราสามารถทำการส่ง output ไปยัง pipe ได้โดย มีตัวอย่าง คำสั่งดังนี้

{ if ($2 == ‘xx’) print | “mailx mary”

หรือ { print $1 | “sort” }

หรือ { print … | “cat -v /dev/tty” }


Using awk

Pattern

pattern เป็นการเลือกตัดสินใจสำหรับการ กระทำ action โดยที่เรานำ expression มาเป็น pattern ดังนี้

- Certain keyword

- Arithmetic relational expression

- Regular expression

- Combination of these


Using awk : Pattern

BEGIN and END

BEGIN และ END เป็น pattern พิเศษโดยที่

BEGION : จะทำการ match ส่วนเริ่มต้นของ input ก่อนที่ record แรกจะถูกอ่าน

END : จะทำการ match ส่วนสุดท้ายของ input หลังจาก record สุดท้ายถูกอ่าน

ตัวอย่างการใช้ คือ

BEGIN {print “Country” , “Area” , “Population” , “Continent” }

{ print }


Using awk : Pattern

Relational expression

เราใช้ expression ในการเปรียบเทียบในการสร้าง pattern เช่น

$3 > 1000

หรือ $4 == “Asia” {print $1}

Operator สำหรับการเปรียบเทียบคือ < , <= , == ,>= ,> , !


Using awk : Pattern

Regular expression

awk อำนวยความสะดวกในการค้นหา string โดยการเขียน regular expression ไว้ภายในเครื่องหมาย / / เข่น

pattern Match string

/^A/ ขึ้นต้นด้วย A

/ia$/ ลงท้ายด้วย ia

/x|y/ ประกอบด้วย x หรือ y

/ax+b/axb , axxb

/ax?b/ ab , axb

/a.b/ axb , aPb , aXb

/ax*b/ ab , axb , axxb


Using awk : Pattern

Combination of these

เราสามารถนำเอา pattern เหล่านี้มาเขียนรวมกันได้โดยใช้ operators && (AND) , || (OR) หรือ ! (NOT) เช่น

$2 > 3000 && $3 > 100

$4 == “Asia” || $4 == “Africa”

$4 ~ /^(Asia|Africa)$/

ซึ่งสอง pattern สุดท้ายได้ผลลัพธ์เท่ากัน


Using awk : Pattern

Pattern range

pattern ที่อยู่ในรูปแบบ

pattern1 , pattern2 {action}

awk จะทำงานโดยทำกับ record ที่อยู่ระหว่าง บรรทัดที่เริ่มที่บรรทัดที่มีค่าปรากฏใน pattern1 จนการกระทั้งถึง บรรทัดที่มีค่าปรากฏใน pattern2 เข่น

/Canada/ , /Brazil/

NR == 2 , NR == 5


Using awk

Action

action เป็นชุดของคำสั่งที่แต่ละคำสั่งจะแยกด้วย การขึ้นบรรทัดใหม่ หรือ การใช้ semicolon (;)

Variables , Expression and Assignment

awk สนับสนุนการทำงานทางคณิตศาสตร์และเก็บค่าลงในตัวแปรเพื่อนำเอามาใช้ในภายหลัง เช่น

/Asia/ { pop += $3 ; ++ n }

END { print “total population of ”, n , “Asian countries is “ , pop }


Using awk : Action

Initialized of variables

ในตัวอย่างก่อนหน้านี้เราไม่ได้ทำการให้ค่าเริ่มต้นกับตัวแปร pop และ n แต่โปรแกรมยังทำงานถูกเนื่องมาจาก

ถ้าเป็นชนิดตัวเลข จะถูกตั้งค่าเป็น 0

ถ้าเป็นชนิด string จะถูกตั้งต่าเป็น null string

ดังนั้นเราสามารถให้ค่าที่กำหนดไว้แล้วเขียน program ได้ดังนี้

maxpop < $3 {

maxpop = $3

country = $1

}

END { print country , maxpop }


Using awk : Action

Field variable

เราสามารถให้ค่ากับตัวแปรที่เป็น fields ได้ดังนี้เช่น

{ $2 /= 1000; print }

หรือ BEGIN { FS = “\t” }

{ $4 = 1000 * $3 / $2 ; print }

หรือ /USA/ { $1 = “United State” ; print }


Using awk : Action

String concatenation

เราสามารถนำ string มา concatenate กันได้โดยการเขียนให้ expression ติดกัน เช่น

{ x = “hello”

x = x “, world”

print x

}

ผลลัพธ์ที่ได้คือ

hello, world


Using awk : Action

Special variables


Using awk : Action

Type

type ของตัวแปร ขึ้นอยู่กับ context ดังนี้

pop = $3 pop มี type เป็น number

country = $1 country มี type เป็น string

maxpop < $3 maxpop จะมี type ตาม $3

โดยทั่วไปแล้ว type จะถูก set จากการ assign ค่า

v = expr ถ้า expr เป็น arithmeticv เป็น number

ถ้า expr เป็น concatenation v เป็น string

สำหรับการบังคับ type ทำได้คือ เป็น number : expr + 0

string : expr “”


Using awk : Action

Array

เราสามารถใช้ array 1 มิติ ใน awk ได้เข่น

X[NR] = $0

โดยเราสามารถ ใช้ index เป็น

- numeric value

- non numeric value

ตัวอย่างเช่น

/Asia/ {pop[“Asia”] += $3}


Using awk

Special feature

เราจะพูดถึง feature พิเศษที่เราสามารถใช้ใน awk ได้

- Bulit-In Function

- Flow of control

- Report generator

- Cooperation with the shell

- Multidimensional arrray


Using awk : Special feature

Built-In function

length การหาความยาวของ string

เข่น { print length,$0}

split ทำการแยก field ไปไว้ใน array โดยแบ่ง filed ตามที่ กำหนด ถ้าไม่กำหนดจะใช้ FS

split ( S,array,sep)

substr ใช้สำหรับตัดส่วนของ string เริ่มต้น และ ขนาดตาม ที่กำหนด

substr (s , m , n)


Using awk : Special feature : Bulit-In function

Index ทำการ return ตำแหน่งซ้ายสุดที่ s2 ปรากฏใน s1 ถ้า ไม่ปรากฏจะ return 0

index (s1,s2)

sprintf ทำการจัดรูปแบบด้วย printf statement แต่จะให้ค่า ไปที่ตัวแปร

x = sprintf(“%10s %6d”,$1,$2)


Using awk : Special feature

Flow of control

awk มี control statement ให้ใช้ดังนี้

- if ... else

- while

- for


Using awk : Special feature : Flow of control

If … Else

มีรูปแบบดังนี้

if (condition) statement1 else statement2

ตัวอย่าง

{ if (maxpop < $3) {

maxpop = $3

country =$1

}

}

END { print country , maxpop }


Using awk : Special feature : Flow of control

While

มีรูปแบบดังนี้

while (condition) statement

ตัวอย่าง

{ i=1

while (i <= NF) {

print $i

++i

}

}


Using awk : Special feature : Flow of control

For

มีรูปแบบดังนี้

for (expr1,expr2,expr3) statement statement2

ตัวอย่าง

{ for (i = 1;i <= NF;i++)

print $i

}


Using awk : Special feature : Flow of control

มี statement อื่นที่ใช้กับ control statement คือ

break จะออกจาก loop ทันที

continue จะกลับไปทำงานที่ต้น loop

next จะไปทำงานที่ record ถัดไป และไปทำงานที่ ต้นของโปรแกรม

exit จะออกจากโปรแกรม

โดย ปรากฏที่ BEGIN จะจบการทำงาทันที

body จะไปทำที่ END

END จะจบการทำงานที่จุดนั้น


Using awk : Special feature

Report generator

พิจารณาจากตัวอย่าง ดังนี้

Sunti awk 9

Ying nroff 8

Nop make 7

Dare dbx 5

Ying troff 2

Sunti awk 1

Dare xdbx 5

Nop mail 3


Using awk : Special feature

Cooperation with the shell

พิจารณาโปรแกรมชื่อ filed ที่บรรจุคำสั่งดังนี้

awk ‘{print $n}’

โดยที่เราสั่ง execute field ดังนี้

field n

เรามีวิธีการส่งค่า n ได้สองวิธีคือ

awk ‘{print $’$1’}’

และ awk “{print \$ $1}”


Using awk : Special feature

Multidimensional array

เราสามารถจำลองการทำงานของ multidimensional array ได้ดังนี้คือ

for ( i = 1 ; i <= 10 ; i++ )

for (j = 1 j <= 10 ; j++)

mult[i “,” j] = …


Reference

  • Fortgang, Karen S., UNIX System V (Programmer’s Guide), Prentice Hall, Inc., Englewood Cliffs, NS 67632, 1987.

  • Burk, Robin and Horvath, David B., CCP, et al., UNIX Unleashed Internet Edition, SAM Publishing ,1998


  • ad