BBSˮľÇ廪վ¡Ã¾«»ªÇø
·¢ÐÅÈË: dfbb (ÕÔÎÞ¼É), ÐÅÇø: Linux
±ê Ìâ: [ÊÖ²á]gawk ʹÓÃÊÖ²á
·¢ÐÅÕ¾: BBS ˮľÇ廪վ (Tue Nov 11 15:19:09 1997)
±ê Ìâ: ¡ó gawk ÊÖ²á
Ö÷ Ìâ: gawk.doc
GAWK
µÚÒ»Õ ǰÑÔ
µÚ¶þÕ ¼ò½é
µÚÈýÕ ¶ÁÈ¡ÊäÈëµµ°¸
µÚËÄÕÂ Ó¡³ö
µÚÎåÕÂ Patterns
µÚÁùÕ Ëãʽ(Expression)×÷ΪActionsµÄÐðÊö
µÚÆßÕ ActionsÀïÃæµÄ¿ØÖÆÐðÊö
µÚ°ËÕ ÄÚ½¨º¯Ê½(Built-in Functions)
µÚ¾ÅÕ ʹÓÃÕß¶¨ÒåµÄº¯Ê½
µÚʮՠ¡õÀý
µÚʮһÕ ½áÂÛ
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
µÚÒ»Õ ǰÑÔ
awk ÊÇÒ»¸ö³ÌʽÓïÑÔ£¬¶Ôì¶×ÊÁϵĴ¦Àí¾ßÓкÜÇ¿µÄ¹¦ÄÜ¡£¶Ôì¶ÎÄ
×ÖµµÀïµÄ×ÊÁÏ×öÐ޸ġ¢±È¶Ô¡¢³éÈ¡µÈµÄ´¦Àí£¬awk Äܹ»ÒԺ̵ܶijÌʽ
ÇáÒ×µØÍê³É¡£Èç¹ûʹÓà C »ò Pascal µÈÓïÑÔд³ÌʽÍê³ÉÉÏÊöµÄ¶¯×÷£¬
»á²»·½±ãÇҺܻ¨·Ñʱ¼ä£¬ËùдµÄ³ÌʽҲ»áºÜ´ó¡£
awk Äܹ»ÒÀÕÕʹÓÃÕߵ͍Òå¸ñʽÀ´·Ö½âÊäÈë×ÊÁÏ£¬Ò²¿ÉÒÀÕÕʹÓÃ
Õß¶¨ÒåµÄ¸ñʽÀ´Ó¡³ö×ÊÁÏ¡£
awk Ãû³ÆµÄÓÉÀ´ÊÇÓÉËüµÄÔʼÉè¼ÆÕßµÄÐÕÊÏÖ®µÚÒ»¸ö×Öĸ¶øÃüÃû
£ºAlfred V. Aho, Peter J. Weinberger, Brian W. Kernighan¡£
awk×î³õÔÚ1977ÄêÍê³É¡£Ò»¸öа汾µÄawkÔÚ1985Äê±»·¢±í£¬ËüµÄ¹¦ÄÜ
±È¾É°æ±¾ÔöÇ¿²»ÉÙ¡£
gawk ÊÇGNUËù×öµÄ awk£¬gawk ×î³õÔÚ1986ÄêÍê³É£¬Ö®áá²»¶ÏµØ
±»¸Ä½ø¡¢¸üС£gawk °üº¬ awk µÄËùÓй¦ÄÜ¡£
ÍùááµÄ gawk ½«ÒÔÏÂÃæµÄ2¸öÊäÈëµµ°¸À´×öÀý×Ó˵Ã÷¡£
µµ°¸'BBS-list'£º
aardvark 555-5553 1200/300 B
alpo-net 555-3412 2400/1200/300 A
barfly 555-7685 1200/300 A
bites 555-1675 2400/1200/300 A
camelot 555-0542 300 C
core 555-2912 1200/300 C
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sdace 555-3430 2400/1200/300 A
sabafoo 555-2127 1200/300 C
µµ°¸'shipped'£º
Jan 13 25 15 115
Feb 15 32 24 226
Mar 15 24 34 228
Apr 31 52 63 420
May 16 34 29 208
Jun 31 42 75 492
Jul 24 34 67 436
Aug 15 34 47 316
Sep 13 55 37 277
Oct 29 54 68 525
Nov 20 87 82 577
Dec 17 35 61 401
Jan 21 36 64 620
Feb 26 58 80 652
Mar 24 75 70 495
Apr 21 70 74 514
µÚ¶þÕ ¼ò½é
gawk µÄÖ÷Òª¹¦ÄÜÊÇÕë¶Ôµµ°¸µÄÿһÐÐ(line)ËÑѰָ¶¨µÄ patterns
¡£µ±Ò»ÐÐÀïÓзûºÏÖ¸¶¨µÄ patterns£¬gawk ¾Í»áÔÚ´ËÒ»ÐÐÖ´Ðб»Ö¸¶¨
µÄ actions¡£ gawk ÒÀ´Ë·½Ê½´¦ÀíÊäÈëµµ°¸µÄÿһÐÐÖ±µ½ÊäÈëµµ°¸½á
Êø¡£
gawk ³ÌʽÊÇÓɺܶàµÄ pattern Óë action Ëù×é³É£¬action дÔÚ
´óÀ¨ºÅ { } ÀïÃæ£¬Ò»¸öpatternááÃæ¾Í¸úÖøÒ»¸öaction¡£Õû¸ö gawk ³Ì
ʽ»áÏñÏÂÃæµÄÑù×Ó£º
pattern {action}
pattern {action}
ÔÚ gawk ³ÌʽÀïÃæµÄ¹æÔò£¬pattern »ò action Äܹ»±»Ê¡ÂÔ£¬µ«
ÊÇÁ½¸ö²»ÄÜͬʱ±»Ê¡ÂÔ¡£Èç¹û pattern ±»Ê¡ÂÔ£¬¶Ôì¶ÊäÈëµµÀïÃæµÄ
ÿһÐУ¬action ¶¼»á±»Ö´ÐС£Èç¹û action ±»Ê¡ÂÔ£¬ÄÚ¶¨µÄ action
Ôò»áÓ¡³öËùÓзûºÏ pattern µÄÊäÈëÐС£
2.1 ÈçºÎÖ´ÐÐgawk³Ìʽ
»ù±¾ÉÏ£¬ÓÐ2¸ö·½·¨¿ÉÒÔÖ´ÐÐgawk³Ìʽ¡£
¡õÈç¹û gawk ³ÌʽºÜ¶Ì£¬Ôò gawk ¿ÉÒÔÖ±½ÓдÔÚ command line£¬ÈçÏÂËùʾ£º
gawk 'program' input-file1 input-file2 ...
ÆäÖÐ program °üÀ¨Ò»Ð© pattern ºÍ action¡£
¡õÈç¹û gawk ³Ìʽ½Ï³¤£¬½ÏΪ·½±ãµÄ×ö·¨Êǽ« gawk ³Ìʽ´æÔÚÒ»¸öµµ°¸£¬
¼´ patterns Óë actions дÔÚµµÃûΪ program-file µÄµµ°¸ÀïÃæ£¬Ö´ÐÐ
gawk µÄ¸ñʽÈçÏÂËùʾ£º
gawk -f program-file input-file1 input-file2 ...
gawk ³ÌʽµÄµµ°¸²»Ö¹Ò»¸öʱ£¬Ö´ÐÐgawk µÄ¸ñʽÈçÏÂËùʾ£º
gawk -f program-file1 -f program-file2 ... input-file1
input-file2 ...
2.2 Ò»¸ö¼òµ¥µÄÀý×Ó
ÏÖÔÚÎÒÃǾÙÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÒòΪ gawk ³ÌʽºÜ¶Ì£¬ËùÒÔ½« gawk ³Ì
ʽֱ½ÓдÔÚ command line¡£
gawk '/foo/ {print $0}' BBS-list
ʵ¼ÊµÄ gawk ³ÌʽΪ /foo/ {print $0}¡£/foo/ Ϊ pattern£¬Òâ˼ΪËÑ
ѰÊäÈëµµÀïµÄÿһÐÐÊÇ·ñº¬ÓÐ×Ó×Ö´® 'foo'£¬Èç¹ûº¬ÓÐ 'foo' ÔòÖ´ÐÐ action¡£
action Ϊ print $0£¬Êǽ«ÏÖÔÚÕâÒ»ÐеÄÄÚÈÝÓ¡³ö¡£BBS-list ÊÇÊäÈëµÄµµ°¸¡£
Ö´ÐÐÍêÉÏÊöÖ¸Áîáᣬ»áÓ¡³öÏÂÃæµÄ½á¹û£º
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C
2.3 Ò»¸ö½Ï¸´ÔÓµÄÀý×Ó
gawk '$1 == "Feb" {sum=$2+$3} END {print sum}' shipped
ÏÖÔÚÕâ¸öÀý×ӻὫÊäÈëµµ 'shipped' µÄµÚÒ»¸öÀ¸Î»Óë "Feb" ×ö±È½Ï
£¬Èç¹ûÏàµÈ£¬ÔòÆä¶ÔÓ¦µÄµÚ2À¸Î»ÓëµÚ3À¸Î»µÄÖµ»á±»¼Óµ½±äÊý sum¡£
¶Ôì¶ÊäÈëµµµÄÿһÐÐÖØ¸´ÉÏÊöµÄ¶¯×÷£¬Ö±µ½ÊäÈëµµµÄÿһÐж¼±»´¦Àí
¹ýΪֹ¡£×îáὫ sum µÄÖµÓ¡³ö¡£END {print sum} µÄÒâ˼ΪÔÚËùÓеÄÊä
Èë¶ÁÍêÖ®áᣬִÐÐÒ»´Î print sum µÄ¶¯×÷£¬Ò²¾ÍÊÇ°Ñ sum µÄÖµÓ¡³ö¡£
ÏÂÃæÊÇÖ´ÐеĽá¹û£º
84
µÚÈýÕ ¶ÁÈ¡ÊäÈëµµ°¸
gawkµÄÊäÈë¿ÉÒÔ´Ó±ê×¼ÊäÈë»òÖ¸¶¨µÄµµ°¸Àï¶ÁÈ¡¡£ÊäÈëµÄ¶ÁÈ¡µ¥
λ±»³ÆÎª¡±¼Ç¼¡±(records)£¬gawk ÔÚ×ö´¦Àíʱ£¬ÊÇÒ»¸ö¼Ç¼һ¸ö¼Ç (p9 of 46)
¼µØ´¦Àí¡£Ã¿¸ö¼Ç¼µÄÄÚ¶¨ÖµÊÇÒ»ÐÐ(line)£¬Ò»¸ö¼Ç¼ÓÖ±»·ÖΪ¶à¸ö
À¸Î»(fields)¡£
3.1 ÈçºÎ½«ÊäÈë·Ö½â³É¼Ç¼(records)
gawk ÓïÑÔ»á°ÑÊäÈë·Ö½â³É¼Ç¼(record)¡£¼Ç¼Óë¼Ç¼֮¼äÊÇÒÔ
record separator ¸ô¿ª£¬record separator µÄÄÚ¶¨ÖµÊDZíʾÐÂÒ»ÐеÄ
×ÖÔª(newline character)£¬Òò´ËÄÚ¶¨µÄ record separator ʹµÃÎÄ×Ö
µÄÿһÐÐÊÇÒ»¸ö¼Ç¼¡£
record separator ËæÖøÄÚ½¨±äÊý RS µÄ¸Ä±ä¶ø¸Ä±ä¡£RS ÊÇÒ»¸ö×Ö´®£¬
ËüµÄÄÚ¶¨ÖµÊÇ"\n"¡£½öÓÐ RS µÄµÚÒ»¸ö×ÖÔªÊÇÓÐЧµÄ£¬Ëü±»µ±×÷ record
separator£¬¶ø RS µÄÆäËü×ÖÔª»á±»ºöÂÔ¡£
ÄÚ½¨±äÊý FNR »á´¢´æÄ¿Ç°µÄÊäÈëµµ°¸ÒѾ±»¶ÁÈ¡µÄ¼Ç¼֮¸öÊý¡£Ä
½¨±äÊý NR »á´¢´æÄ¿Ç°ÎªÖ¹ËùÓеÄÊäÈëµµ°¸ÒѾ±»¶ÁÈ¡µÄ¼Ç¼֮¸öÊý¡
3.2 À¸Î»(field)
gawk »á×Ô¶¯½«Ã¿¸ö¼Ç¼·Ö½â³É¶à¸öÀ¸Î» (field)¡£ÀàËÆì¶×ÖÔÚÒ»
ÐÐÀïÃæ£¬gawk µÄÄÚ¶¨¶¯×÷»áÈÏΪÀ¸Î»Ö®¼äÊÇÒÔ whitespace ·Ö¿ª¡£ÔÚ
gawk Àwhitespace µÄÒâ˼ÊÇÒ»¸ö»ò¶à¸ö¿Õ°×»ò tabs¡£
ÔÚ gawk ³ÌʽÀïÃæ£¬ÒÔ'$1'±íʾµÚÒ»¸öÀ¸Î»£¬'$2'±íʾµÚ¶þ¸öÀ¸Î»
£¬ÒÀ´ËÀàÍÆ¡£¾Ù¸öÀý×Ó£¬¼ÙÉèÊäÈëµÄÒ»ÐÐÈçÏÂËùʾ£º
This seems like a pretty nice example.
µÚÒ»¸öÀ¸Î»»ò $1 ÊÇ'This'£¬µÚ¶þ¸öÀ¸Î»»ò $2 ÊÇ 'seems'£¬ÒÀ´ËÀàÍÆ¡£
ÓиöµØ·½ÖµµÃÌØ±ð×¢Ò⣬µÚÆß¸öÀ¸Î»»ò $7 ÊÇ'example.'¶ø·Ç'example'¡£
²»ÂÛÓжàÉÙÀ¸Î»£¬$NF ¿ÉÓÃÀ´±íʾһ¸ö¼Ç¼µÄ×îááÒ»¸öÀ¸Î»¡£ÒÔ
ÉÏÃæµÄÀý×ÓΪÀý£¬$NF Óë $7 Ïàͬ£¬Ò²¾ÍÊÇ'example.'¡£
NF ÊÇÒ»¸öÄÚ½¨±äÊý£¬ËüµÄÖµ±íʾĿǰÕâ¸ö¼Ç¼֮À¸Î»µÄ¸öÊý¡£ $0£¬¿´ÆðÀ´ºÃÏñÊǵÚÁã¸öÀ¸Î»£¬ËüÊÇÒ»¸öÌØÀý£¬Ëü±íʾÕû¸ö¼Ç¼¡£
ÏÂÃæÊÇÒ»¸ö½Ï¸´ÔÓµÄÀý×Ó£º
gawk '$1~/foo/ {print $0}' BBS-list
½á¹ûÈçÏ£º
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C
Õâ¸öÀý×ÓÊǰÑÊäÈëµµ'BBS-list'µÄÿ¸ö¼Ç¼µÄµÚÒ»¸öÀ¸Î»×÷¼ì²é£¬Èç
¹ûËüº¬ÓÐ×Ó×Ö´®'foo'£¬ÔòÕâÒ»¸ö¼Ç¼»á±»Ó¡³ö¡£
3.3 ÈçºÎ½«¼Ç¼·Ö½â³ÉÀ¸Î»
gawk ¸ù¾Ý field separator ½«Ò»¸ö¼Ç¼·Ö½â³ÉÀ¸Î»¡£field sepa- rator ÒÔÄÚ½¨±äÊý FS ±íʾ¡£
¾Ù¸öÀý×Ó£¬¼ÙÈç field separator ÊÇ'oo'£¬ÔòÏÂÃæµÄÐУº
moo goo gai pan
»á±»·Ö³ÉÈý¸öÀ¸Î»£º'm'¡¢' g'¡¢' gai pan'¡£
ÔÚ gawk ³ÌʽÀ¿ÉÒÔʹÓÃ'='À´¸Ä±ä FS µÄÖµ¡£ÀýÈç:
gawk 'BEGIN {FS=","}; {print $2}'
ÊäÈëÐÐÈçÏ£º
John Q. Smith, 29 Oak St., Walamazoo, MI 42139
Ö´ÐÐgawkµÄ½á¹û½«Ó¡³ö×Ö´® ' 29 Oak St.'¡£BEGIN ááÃæµÄ action »áÔÚ
µÚÒ»¸ö¼Ç¼±»¶Áȡ֮ǰִÐÐÒ»´Î¡£
µÚËÄÕÂ Ó¡³ö
ÔÚgawk³ÌʽÀactions ×î³£×öµÄʾÍÊÇÓ¡³ö(printing)¡£¼òµ¥
µÄÓ¡³ö£¬Ê¹Óà printeÐðÊö¡£¸´ÔÓ¸ñʽµÄÓ¡³ö£¬Ê¹Óà printf ÐðÊö¡£
4.1 printÐðÊö
print ÐðÊöÓÃÔÚ¼òµ¥¡¢±ê×¼µÄÊä³ö¸ñʽ¡£ÐðÊöµÄ¸ñʽÈçÏÂËùʾ£º
print item1, item2, ...
Êä³öʱ£¬¸÷¸ö item Ö®¼ä»áÒÔÒ»¸ö¿Õ°×·Ö¿ª£¬×îáá»á»»ÐÐ(newline)¡£
Èç¹û 'print'ÐðÊöÖ®ááûÓиúÖøÈκζ«Î÷£¬ËüÓë'print $0'µÄЧ
¹ûÒ»Ñù£¬Ëü»áÓ¡³öÏÖÔڵļǼ(record)¡£ÒªÓ¡³ö¿Õ°×ÐпÉʹÓÃ'print
""'¡£ Ó¡³öÒ»¶Î¹Ì¶¨µÄÎÄ×Ö£¬¿ÉÓÃË«ÒýºÅ½«ÎÄ×ÖµÄÁ½±ßÀ¨ÆðÀ´£¬ÀýÈç
'print "Hello there"'¡£
ÕâÀïÊÇÒ»¸öÀý×Ó£¬Ëü»á°Ñÿ¸öÊäÈë¼Ç¼µÄǰ¶þ¸öÀ¸Î»Ó¡³ö£º
gawk '{print $1,$2}' shipped
½á¹ûÈçÏÂËùʾ£º
Jan 13
Feb 15
Mar 15
Apr 31
May 16
Jun 31
Jul 24
Aug 15
Sep 13
Oct 29
Nov 20
Dec 17
Feb 26
Mar 24
Apr 21
4.2 Output Separators
Ç°ÃæÎÒÃÇÒÑÌá¹ýÈç¹û print ÐðÊö°üº¬Óжà¸ö item£¬item Ö®¼ä
Óöºµã·Ö¿ª£¬ÔòÓ¡³öʱ¸÷¸öitem»á±»Ò»¸ö¿Õ°×¸ô¿ª¡£ÄãÄܹ»Ê¹ÓÃÈκÎ
µÄ×Ö´®×÷Ϊ output field separator£¬¿ÉÒÔ¾ÓÉÄÚ½¨±äÊý OFS µÄÉè
¶¨À´¸ü¸Ä output field separator¡£OFS µÄ³õʼֵΪ" "£¬¼´Ò»¸ñµÄ
¿Õ°×¡£
Õû¸ö print ÐðÊöµÄÊä³ö±»³ÆÎª output record¡£print ÐðÊöÊä
³ö output record Ö®áᣬ»á½ÓÖøÊä³öÒ»¸ö×Ö´®£¬´Ë×Ö´®³ÆÎª output
record separator¡£ÄÚ½¨±äÊý ORS ÓÃÀ´Ö¸Ã÷´Ë×Ö´®¡£ORS µÄ³õʼֵ
Ϊ "\n"£¬Ò²¾ÍÊÇ»»ÐС£
ÏÂÃæÕâ¸öÀý×Ó»áÓ¡³öÿ¸ö¼Ç¼µÄµÚÒ»¸öÀ¸Î»ºÍµÚ¶þ¸öÀ¸Î»£¬´Ë¶þ
(p16 of 46)
¸öÀ¸Î»Ö®¼äÒÔ·ÖºÅ';'·Ö¿ª£¬Ã¿ÐÐÊä³öÖ®áá»á¼ÓÈëÒ»¸ö¿Õ°×ÐС£
gawk 'BEGIN {OFS=";"; ORS="\n\n"} {print $1, $2}' BBS-list
½á¹ûÈçÏÂËùʾ£º
aardvark;555-5553
alpo-net;555-3412
barfly;555-7685
bites;555-1675
camelot;555-0542
core;555-2912
fooey;555-1234
foot;555-6699
macfoo;555-6480
sdace;555-3430
sabafoo;555-2127
4.3 printfÐðÊö
printf ÐðÊö»áʹµÃÊä³ö¸ñʽ½ÏÈÝÒ×¾«È·µØ¿ØÖÆ¡£printf ÐðÊö¿ÉÒÔ
Ö¸¶¨Ã¿¸ö item Ó¡³öµÄ¿í¶È£¬Ò²¿ÉÒÔÖ¸¶¨Êý×ֵĸ÷ÖÖÐÍʽ¡£
printf ÐðÊöµÄ¸ñʽÈçÏ£º
printf format, item1, item2, ...
print Óë printf µÄ²î±ðÊÇÔÚì¶ format, printf µÄÒýÊý±È print
(p18 of
¶àÁË×Ö´® format¡£format µÄÐÍʽÓë ANSI C µÄ printf Ö®¸ñʽÏàͬ¡£
printf ²¢²»»á×ö×Ô¶¯»»Ðе͝×÷¡£ÄÚ½¨±äÊý OFS Óë ORS ¶Ô printf Ðð
ÊöûÓÐÈκÎÓ°Ïì¡£
¸ñʽµÄÖ¸¶¨ÒÔ×ÖÔª'%'¿ªÊ¼£¬ááÃæ½ÓÖø¸ñʽ¿ØÖÆ×Öĸ¡£
¸ñʽ¿ØÖÆ×ÖĸÈçÏÂËùʾ£º
'c' ½«Êý×ÖÒÔ ASCII ×ÖÔªÓ¡³ö¡£
ÀýÈç'printf "%C",65'»áÓ¡³ö×ÖÔª'A'¡£
'd' Ó¡³öÊ®½øÎ»µÄÕûÊý¡£
'i' Ó¡³öÊ®½øÎ»µÄÕûÊý¡£
'e' ½«Êý×ÖÒÔ¿ÆÑ§·ûºÅµÄÐÎʽӡ³ö¡£
ÀýÈç
print "$4.3e",1950
(p19 of
½á¹û»áÓ¡³ö'1.950e+03'¡£
'f' ½«Êý×ÖÒÔ¸¡µãµÄÐÎʽӡ³ö¡£
'g' ½«Êý×ÖÒÔ¿ÆÑ§·ûºÅµÄÐÎʽ»ò¸¡µãµÄÐÎʽӡ³ö¡£Êý×ֵľø¶ÔÖµÈç¹û
´óì¶µÈì¶0.0001ÔòÒÔ¸¡µãµÄÐÎʽӡ³ö£¬·ñÔòÒÔ¿ÆÑ§·ûºÅµÄÐÎʽӡ
³ö¡£
'o' Ó¡³öÎ޺ŵİ˽øÎ»ÕûÊý¡£
's' Ó¡³öÒ»¸ö×Ö´®¡£
'x' Ó¡³öÎ޺ŵÄÊ®Áù½øÎ»ÕûÊý¡£10ÖÁ15ÒÔ'a'ÖÁ'f'±íʾ¡£
'X' Ó¡³öÎ޺ŵÄÊ®Áù½øÎ»ÕûÊý¡£10ÖÁ15ÒÔ'A'ÖÁ'F"±íʾ¡£
'%' Ëü²¢²»ÊÇÕæÕýµÄ¸ñʽ¿ØÖÆ×Öĸ£¬'%%"½«Ó¡³ö"%'¡£
ÔÚ % Óë¸ñʽ¿ØÖÆ×Öĸ֮¼ä¿É¼ÓÈë modifier£¬modifier ÊÇÓÃÀ´½øÒ»
²½¿ØÖÆÊä³öµÄ¸ñʽ¡£¿ÉÄÜµÄ modifier ÈçÏÂËùʾ£º
'-' ʹÓÃÔÚ width ֮ǰ£¬Ö¸Ã÷ÊÇÏò×ó¿¿Æë¡£Èç¹û'-'ûÓгöÏÖ£¬Ôò»áÔÚ
±»Ö¸¶¨µÄ¿í¶ÈÏòÓÒ¿¿Æë¡£ÀýÈ磺
printf "%-4S", "foo"
»áÓ¡³ö'foo '¡£
'width' ÕâÒ»¸öÊý×ÖָʾÏà¶ÔÓ¦µÄÀ¸Î»Ó¡³öʱµÄ¿í¶È¡£ÀýÈ磺
printf "%4s","foo"
»áÓ¡³ö' foo'¡£
width µÄÖµÊÇÒ»¸ö×îС¿í¶È¶ø·Ç×î´ó¿í¶È¡£Èç¹ûÒ»¸ö item µÄ
ÖµÐèÒªµÄ¿í¶È±È width ´ó£¬Ôò²»ÊÜ width µÄÓ°Ïì¡£ÀýÈç
printf "%4s","foobar"
½«Ó¡³ö'foobar'¡£
'.prec' ´ËÊý×ÖÖ¸¶¨Ó¡³öʱµÄ¾«È·¶È¡£ËüÖ¸¶¨Ð¡ÊýµãÓұߵÄλÊý¡£Èç
¹ûÊÇÒªÓ¡³öÒ»¸ö×Ö´®£¬ËüÖ¸¶¨´Ë×Ö´®×î¶à»á±»Ó¡³ö¶àÉÙ¸ö×Ö
Ôª¡£
µÚÎåÕÂ patterns
ÔÚ gawk ³ÌʽÀïÃæ£¬µ± pattern ·ûºÏÏÖÔÚµÄÊäÈë¼Ç¼(record)£¬Æä
Ïà¶ÔÓ¦µÄ action ²Å»á±»Ö´ÐС£
5.1 PatternµÄÖÖÀà
ÕâÀï¶Ô gawk µÄ¸÷ÖÖ pattern ÐÍʽ×÷Ò»ÕûÀí£º
/regular expression/
(p22 of
Ò»¸ö regular expression µ±×÷Ò»¸ö pattern¡£Ã¿µ±ÊäÈë¼Ç¼ (
record)º¬ÓÐ regular expression ¾ÍÊÓΪ·ûºÏ¡£
expression
Ò»¸öµ¥Ò»µÄ expression¡£µ±Ò»¸öÖµ²»Îª 0 »òÒ»¸ö×Ö´®²»Êǿյģ¬
Ôò¿ÉÊÓΪ·ûºÏ¡£
pat1,pat2
Ò»¶ÔµÄ patterns ÒÔ¶ººÅ·Ö¿ª£¬Ö¸¶¨¼Ç¼µÄ¡õΧ¡£
BEGIN
END
ÕâÊÇÌØ±ðµÄ pattern, gawk ÔÚ¿ªÊ¼Ö´ÐлòÒª½áÊøÊ±»á·Ö±ðÖ´ÐÐÏà
¶ÔÓ¦ì¶BEGIN»òENDµÄ action¡£
null
ÕâÊÇÒ»¸ö¿ÕµÄpattern£¬¶Ôì¶Ã¿¸öÊäÈë¼Ç¼½ÔÊÓΪ·ûºÏpattern¡£
(p23 of
5.2 Regular Expressionsµ±×÷Patterns
Ò»¸ö regular expression ¿É¼òдΪ regexp£¬ÊÇÒ»ÖÖÃèÊö×Ö´®µÄ·½
·¨¡£Ò»¸ö regular expression ÒÔбÏß('/')°üΧµ±×÷ gawk µÄ pattern¡£
Èç¹ûÊäÈë¼Ç¼º¬ÓÐ regexp ¾ÍÊÓΪ·ûºÏ¡£ÀýÈ磺pattern Ϊ /foo/£¬
¶Ôì¶ÈκÎÊäÈë¼Ç¼º¬ÓÐ'foo'ÔòÊÓΪ·ûºÏ¡£
ÏÂÃæµÄÀý×ӻὫº¬ÓÐ'foo'µÄÊäÈë¼Ç¼֮µÚ2¸öÀ¸Î»Ó¡³ö¡£
gawk '/foo/ {print $2}' BBS-list
½á¹ûÈçÏ£º
555-1234
555-6699
555-6480
555-2127
regexp Ò²ÄÜʹÓÃÔڱȽϵÄËãʽ¡£
(p24 of
exp ~ /regexp/
Èç¹û exp ·ûºÏ regexp£¬Ôò½á¹ûÎªÕæ(true)¡£
exp !~ /regexp/
Èç¹û exp ²»·ûºÏ regexp£¬Ôò½á¹ûÎªÕæ¡£
5.3 ±È½ÏµÄËãʽµ±×÷Patterns
±È½ÏµÄ pattern ÓÃÀ´²âÊÔÁ½¸öÊý×Ö»ò×Ö´®µÄ¹ØÏµÖîÈç´óì¶¡¢µÈì¶
¡¢Ð¡ì¶¡£ÏÂÃæÁгöһЩ±È½ÏµÄpattern£º
x<y Èç¹û x Ð¡ì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x<=y Èç¹û x С춡¢µÈì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x>y Èç¹û x ´óì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x>=y Èç¹û x ´óì¶¡¢µÈì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x==y Èç¹û x µÈì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x!=y Èç¹û x ²»µÈì¶ y£¬Ôò½á¹ûÎªÕæ¡£
x~y Èç¹û x ·ûºÏ regular expression y£¬Ôò½á¹ûÎªÕæ¡£
(p25 of
x!~y Èç¹û x ²»·ûºÏ regular expression y£¬Ôò½á¹ûÎªÕæ¡£
ÉÏÃæËùÌáµ½µÄ x Óë y£¬Èç¹û¶þÕß½ÔÊÇÊý×ÖÔòÊÓΪÊý×ÖÖ®¼äµÄ±È½Ï£¬
·ñÔòËüÃǻᱻת»»³É×Ö´®ÇÒÒÔ×Ö´®µÄÐÎʽ×ö±È½Ï¡£Á½¸ö×Ö´®µÄ±È½Ï£¬
»áÏȱȽϵÚÒ»¸ö×ÖÔª£¬È»áá±È½ÏµÚ¶þ¸ö×ÖÔª£¬ÒÀ´ËÀàÍÆ£¬Ö±µ½Óв»Í¬
µÄµØ·½³öÏÖΪֹ¡£Èç¹ûÁ½¸ö×Ö´®Ôڽ϶̵ÄÒ»¸ö½áÊøÖ®Ç°ÊÇÏàµÈ£¬ÔòÊÓ
Ϊ³¤µÄ×Ö´®±È¶ÌµÄ×Ö´®´ó¡£ÀýÈç "10" ±È "9" С£¬"abc" ±È "abcd" С¡£
5.4 ʹÓò¼ÁÖÔËËãµÄPatterns
Ò»¸ö²¼ÁÖ(boolean) pattern ÊÇʹÓò¼ÁÖÔËËã"»ò"('||')£¬"¼°"
('&&')£¬"·´"('!')À´×éºÏÆäËüµÄpattern¡£
ÀýÈ磺
gawk '/2400/ && /foo/' BBS-list
gawk '/2400/ || /foo/' BBS-list
gawk '! /foo/' BBS-list
µÚÁùÕ Ëãʽ(Expression)×÷ΪActionsµÄÐðÊö
Ëãʽ(Expression) ÊÇgawk³ÌʽÀïÃæactionµÄ»ù±¾¹¹³ÉÕß¡£
6.1 ËãÊõÔËËã
gawk ÀïµÄËãÊõÔËËãÈçÏÂËùʾ£º
x+y ¼Ó
x-y ¼õ
-x ¸º
+x Õý¡£Êµ¼ÊÉÏûÓÐÈκÎÓ°Ïì¡£
x*y ³Ë
x/y ³ý
x%y ÇóâÅÊý¡£ÀýÈç 5%3=2¡£
x^y
x**y x µÄ y ´Î·½¡£ÀýÈç2^3=8¡£
6.2 ±È½ÏËãʽÓë²¼ÁÖËãʽ
±È½ÏËãʽ (comparison expression) ÓÃÀ´±È½Ï×Ö´®»òÊý×ֵĹØÏµ
£¬ÔËËã·ûºÅÓë C ÓïÑÔÏàͬ¡£±íÁÐÈçÏ£º
x<y
x<=y
x>y
x>=y
x==y
x!=y
x~y
x!~y
±È½ÏµÄ½á¹ûÎªÕæ(true)ÔòÆäÖµÊÇ 1¡£·ñÔòÆäÖµÊÇ 0¡£
²¼ÁÖËãʽ(boolean expression)ÓÐÏÂÃæÈýÖÖ£º
boolean1 && boolean2
boolean1 || boolean2
! boolean
6.3 Ìõ¼þËãʽ(Conditional Expressions)
Ò»¸öÌõ¼þʽËãʽÊÇÒ»ÖÖÌØ±ðµÄËãʽ£¬Ëüº¬ÓÐ3¸öÔËËãÔª¡£
Ìõ¼þʽËãʽÓëCÓïÑÔµÄÏàͬ£º
selector ? if-true-exp : if-false-exp
ËüÓÐ3¸ö×ÓËãʽ¡£µÚÒ»¸ö×ÓËãʽselector Ê×ÏȻᱻ¼ÆËã¡£Èç¹ûÊÇÕæ,
Ôòif-true-exp»á±»¼ÆËãÇÒËüµÄÖµ±ä³ÉÕû¸öËãʽµÄÖµ¡£·ñÔòif-false-
exp »á±»¼ÆËãÇÒËüµÄÖµ±ä³ÉÕû¸öËãʽµÄÖµ¡£
ÀýÈçÏÂÃæµÄÀý×Ó»á²úÉúxµÄ¾ø¶ÔÖµ£º
x>0 ? x : -x
µÚÆßÕ ActionsÀïÃæµÄ¿ØÖÆÐðÊö
ÔÚ gawk ³ÌʽÀïÃæ£¬¿ØÖÆÐðÊöÖîÈç if¡¢while µÈ¿ØÖƳÌʽִÐеÄÁ÷
³Ì¡£ÔÚ gawk ÀïµÄ¿ØÖÆÐðÊöÓë C µÄÀàËÆ¡£
ºÜ¶àµÄ¿ØÖÆÐðÊö»á°üÀ¨ÆäËüµÄÐðÊö£¬±»°üÀ¨µÄÐðÊö³ÆÎª body¡£¼Ù
Èç body ÀïÃæ°üÀ¨Ò»¸öÒÔÉϵÄÐðÊö£¬±ØÐëÒÔ´óÀ¨»¡ { } ½«ÕâЩÐðÊöÀ¨Æð
À´£¬¶ø¸÷¸öÐðÊöÖ®¼äÐèÒÔ»»ÐÐ(newline)»ò·ÖºÅ¸ô¿ª¡£
7.1 if ÐðÊö
if (condition) then-body [else else-body]
(p30 of
Èç¹û condition ÎªÕæ(true)£¬ÔòÖ´ÐÐ then-body£¬·ñÔòÖ´ÐÐ else-body¡£
¾ÙÒ»¸öÀý×ÓÈçÏ£º
if (x % 2 == 0)
print "x is even"
else
print "x is odd"
7.2 while ÐðÊö
while (condition)
body
while ÐðÊö×öµÄµÚÒ»¼þʾÍÊDzâÊÔ condition¡£¼ÙÈç condition ÎªÕæÔò
Ö´ÐÐ body µÄÐðÊö¡£body µÄÐðÊöÖ´ÐÐÍêáᣬ»áÔÙ²âÊÔ condition£¬¼ÙÈç
condition ÎªÕæ£¬Ôò body »áÔٶȱ»Ö´ÐС£Õâ¸ö¹ý³Ì»áÒ»Ö±±»Öظ´Ö±µ½
condition ²»ÔÙÊÇÕæ¡£Èç¹û condition µÚÒ»´Î²âÊÔ¾ÍÊÇα(false)£¬Ôò
body ´ÓûÓб»Ö´ÐС£
ÏÂÃæµÄÀý×Ó»áÓ¡³öÿ¸öÊäÈë¼Ç¼(record)µÄǰÈý¸öÀ¸Î»¡£
gawk '{ i=1
while (i <= 3) {
print $i
i++
}
}'
7.3 do-while ÐðÊö
do
body
while (condition)
Õâ¸ö do loop Ö´ÐÐ body Ò»´Î£¬È»ááÖ»Òª condition ÊÇÕæÔò»áÖØ¸´Ö´ÐÐ body¡£
(p32 of
¼´Ê¹¿ªÊ¼Ê± condition ÊÇᣬbody Ò²»á±»Ö´ÐÐÒ»´Î¡£
ÏÂÃæµÄÀý×Ó»áÓ¡³öÿ¸öÊäÈë¼Ç¼ʮ´Î¡£
gawk '{ i= 1
do {
print $0
i++
} while (i <= 10)
}'
7.4 for ÐðÊö
for (initialization; condition; increment)
body
´ËÐðÊö¿ªÊ¼Ê±»áÖ´ÐÐinitialization£¬È»ááÖ»Òª conditionÊÇÕæ£¬Ëü
»áÖØ¸´Ö´ÐÐbodyÓë×öincrement ¡£
ÏÂÃæµÄÀý×Ó»áÓ¡³öÿ¸öÊäÈë¼Ç¼µÄǰÈý¸öÀ¸Î»¡£
gawk '{ for (i=1; i<=3; i++)
print $i
}'
7.5 break ÐðÊö
break ÐðÊö»áÌø³ö°üº¬ËüµÄ for¡¢while¡¢do-while »ØÈ¦µÄ×îÄڲ㡣
ÏÂÃæµÄÀý×Ó»áÕÒ³öÈκÎÕûÊýµÄ×îС³ýÊý£¬ËüÒ²»áÅжÏÊÇ·ñΪÖÊÊý¡£
gawk '# find smallest divisor of num
{ num=$1
for (div=2; div*div <=num; div++)
if (num % div == 0)
break
if (num % div == 0)
printf "Smallest divisor of %d is %d\n", num, div
else
printf "%d is prime\n", num }'
7.6 continue ÐðÊö
(p34 of 46)
continue ÐðÊöʹÓÃì¶ for¡¢while¡¢do-while »ØÈ¦ÄÚ²¿£¬Ëü»áÌø
¹ý»ØÈ¦ body µÄÊ£âŲ¿·Ö£¬Ê¹µÃËüÁ¢¿Ì½øÐÐÏÂÒ»´Î»ØÈ¦µÄÖ´ÐС£
ÏÂÃæµÄÀý×Ó»áÓ¡³ö 0 ÖÁ 20 µÄÈ«²¿Êý×Ö£¬µ«ÊÇ 5 ²¢²»»á±»Ó¡³ö¡£
gawk 'BEGIN {
for (x=0; x<=20; x++) {
if (x==5)
continue
printf ("%d",x)
}
print ""
}'
7.7 next ÐðÊö¡¢next file ÐðÊö¡¢exit ÐðÊö
next ÐðÊöÇ¿ÆÈ gawk Á¢¿ÌÍ£Ö¹´¦ÀíĿǰµÄ¼Ç¼(record)¶ø¼ÌÐøÏÂÒ»
¸ö¼Ç¼¡£
next file ÐðÊöÀàËÆ next¡£È»¶ø£¬ËüÇ¿ÆÈ gawk Á¢¿ÌÍ£Ö¹´¦ÀíĿǰ
µÄ×ÊÁϵµ¡£
exit ÐðÊö»áʹµÃ gawk ³ÌʽִֹͣÐжøÌø³ö¡£È»¶ø£¬Èç¹û END ³öÏÖ
£¬Ëü»áÈ¥Ö´ÐÐ END µÄ actions¡£
µÚ°ËÕ ÄÚ½¨º¯Ê½(Built-in Functions)
ÄÚ½¨º¯Ê½ÊÇ gawk ÄÚ½¨µÄº¯Ê½£¬¿ÉÔÚ gawk ³ÌʽµÄÈκεط½ºô½ÐÄÚ½¨
º¯Ê½¡£
8.1 ÊýÖµ·½ÃæµÄÄÚ½¨º¯Ê½
int(x) Çó³ö x µÄÕûÊý²¿·Ý£¬³¯Ïò 0 µÄ·½Ïò×öÉáÈ¥¡£ÀýÈ磺int(3.9)
ÊÇ 3£¬int(-3.9) ÊÇ -3¡£
(p36 of 46)
sqrt(x) Çó³ö x ÕýµÄƽ·½¸ùÖµ¡£Àý sqrt(4)=2
exp(x) Çó³ö x µÄ´Î·½¡£Àý exp(2) ¼´ÊÇÇó e*e ¡£
log(x) Çó³ö x µÄ×ÔÈ»¶ÔÊý¡£
sin(x) Çó³ö x µÄ sine Öµ£¬x ÊÇåò¶ÈÁ¿¡£
cos(x) Çó³ö x µÄ cosine Öµ£¬x ÊÇåò¶ÈÁ¿¡£
atan2(y,x) Çó y/x µÄ arctangent Öµ£¬ËùÇó³öµÄÖµÆäµ¥Î»ÊÇåò¶ÈÁ¿¡£
rand() µÃ³öÒ»¸öÂÒÊýÖµ¡£´ËÂÒÊýֵƽ¾ù·Ö²¼ÔÚ 0 ºÍ 1 Ö®¼ä¡£Õâ¸ö
Öµ²»»áÊÇ 0£¬Ò²²»»áÊÇ 1¡£
ÿ´ÎÖ´ÐÐ gawk£¬rand ¿ªÊ¼²úÉúÊý×Ö´ÓÏàͬµã»ò seed¡£
srand(x) É趨²úÉúÂÒÊýµÄ¿ªÊ¼µã»ò seed Ϊ x¡£Èç¹ûÔÚµÚ¶þ´ÎÄãÉè
¶¨ÏàͬµÄ seed Öµ£¬Ä㽫Ôٶȵõ½ÏàͬÐòÁеÄÂÒÊýÖµ¡£
Èç¹ûÊ¡ÂÔÒýÊý x£¬ÀýÈç srand()£¬ÔòÏÖÔÚµÄÈÕÆÚ¡¢Ê±¼ä»á
±»µ±³É seed¡£Õâ¸ö·½·¨¿ÉʹµÃÂÒÊýÖµÊÇÕæÕý²»¿ÉÔ¤²âµÄ¡£
srand µÄ´«»ØÖµ(return value)ÊÇǰ´ÎËùÉ趨µÄ seed Öµ¡£
8.2 ×Ö´®·½ÃæµÄÄÚ½¨º¯Ê½
index(in, find)
(p37 of 46)
Ëü»áÔÚ×Ö´® in ÀïÃæ£¬Ñ°ÕÒ×Ö´® find µÚÒ»´Î³öÏֵĵط½£¬´«»ØÖµÊÇ
×Ö´® find ³öÏÖÔÚ×Ö´® in ÀïÃæµÄλÖá£Èç¹ûÔÚ×Ö´® in ÀïÃæÕÒ²»µ½×Ö
´® find£¬Ôò´«»ØÖµÎª 0¡£
ÀýÈ磺
print index("peanut","an")
»áÓ¡³ö 3¡£
length(string)
Çó³ö string Óм¸¸ö×ÖÔª¡£
ÀýÈ磺
length("abcde")
ÊÇ 5¡£
match(string,regexp)
match º¯Ê½»áÔÚ×Ö´® string ÀïÃæ£¬Ñ°ÕÒ·ûºÏ regexp µÄ×¡¢×î¿¿
×ó±ßµÄ×Ó×Ö´®¡£´«»ØÖµÊÇ regexp ÔÚ string µÄ¿ªÊ¼Î»Ö㬼´ index
Öµ¡£
match º¯Ê½»áÉ趨ÄÚÔÚ±äÊý RSTART µÈì¶ index£¬ËüÒ²»áÉ趨ÄÚÔÚ±ä
Êý RLENGTH µÈì¶·ûºÏµÄ×ÖÔª¸öÊý¡£Èç¹û²»·ûºÏ£¬Ôò»áÉ趨 RSTART Ϊ
0¡¢RLENGTH Ϊ -1¡£
(p38 of 46)
sprintf(format,expression1,...)
¾Ù printf ÀàËÆ£¬µ«ÊÇ sprintf ²¢²»Ó¡³ö£¬¶øÊÇ´«»Ø×Ö´®¡£
ÀýÈ磺
sprintf("pi = %.2f (approx.)',22/7)
´«»ØµÄ×Ö´®Îª"pi = 3.14 (approx.)"
sub(regexp, replacement,target)
ÔÚ×Ö´® target ÀïÃæ£¬Ñ°ÕÒ·ûºÏ regexp µÄ×¡¢×î¿¿×ó±ßµÄµØ·½£¬
ÒÔ×Ö´® replacement ´úÌæ×î×ó±ßµÄ regexp¡£
ÀýÈ磺
str = "water, water, everywhere"
sub(/at/, "ith",str)
½á¹û×Ö´®str»á±ä³É
"wither, water, everywhere"
gsub(regexp, replacement, target)
gsub ÓëÇ°ÃæµÄ sub ÀàËÆ¡£ÔÚ×Ö´® target ÀïÃæ£¬Ñ°ÕÒ·ûºÏ regexp µÄ
ËùÓеط½£¬ÒÔ×Ö´® replacement ´úÌæËùÓÐµÄ regexp¡£
ÀýÈ磺
(p39 of 46)
str="water, water, everywhere"
gsub(/at/, "ith",str)
½á¹û×Ö´®str»á±ä³É
'wither, wither, everywhere"
substr(string, start, length)
´«»Ø×Ö´® string µÄ×Ó×Ö´®£¬Õâ¸ö×Ó×Ö´®µÄ³¤¶ÈΪ length ¸ö×ÖÔª£¬
´ÓµÚ start ¸öλÖÿªÊ¼¡£
ÀýÈ磺
substr("washington",5,3)
´«»ØÖµÎª"ing"
Èç¹û length ûÓгöÏÖ£¬Ôò´«»ØµÄ×Ó×Ö´®ÊÇ´ÓµÚ start ¸öλÖÿªÊ¼
ÖÁ½áÊø¡£
ÀýÈ磺
substr("washington",5)
´«»ØÖµÎª"ington"
tolower(string)
½«×Ö´®stringµÄ´óд×Öĸ¸ÄΪСд×Öĸ¡£
ÀýÈ磺
tolower("MiXeD cAsE 123")
´«»ØÖµÎª"mixed case 123"
toupper(string)
½«×Ö´®stringµÄСд×Öĸ¸ÄΪ´óд×Öĸ¡£
ÀýÈ磺
toupper("MiXeD cAsE 123")
´«»ØÖµÎª"MIXED CASE 123"
8.3 ÊäÈëÊä³öµÄÄÚ½¨º¯Ê½
close(filename)
½«ÊäÈë»òÊä³öµÄµµ°¸ filename ¹Ø±Õ¡£
system(command)
´Ëº¯Ê½ÔÊÐíʹÓÃÕßÖ´ÐÐ×÷ҵϵͳµÄÖ¸ÁִÐÐÍê±ÏáὫ»Øµ½ gawk
³Ìʽ¡£
ÀýÈ磺
BEGIN {system("ls")}
µÚ¾ÅÕ ʹÓÃÕß¶¨ÒåµÄº¯Ê½(User-defined Functions)
¸´Ô gawk ³Ìʽ³£³£¿ÉÒÔʹÓÃ×Ô¼º¶¨ÒåµÄº¯Ê½À´¼ò»¯¡£ºô½ÐʹÓÃ
Õß¶¨ÒåµÄº¯Ê½Óëºô½ÐÄÚ½¨º¯Ê½µÄ·½·¨Ò»Ñù¡£
9.1 º¯Ê½¶¨ÒåµÄ¸ñʽ
º¯Ê½µÄ¶¨Òå¿ÉÒÔ·ÅÔÚ gawk ³ÌʽµÄÈκεط½¡£
Ò»¸öʹÓÃÕß¶¨ÒåµÄº¯Ê½Æä¸ñʽÈçÏ£º
function name (parameter-list) {
body-of-function
}
name ÊÇËù¶¨ÒåµÄº¯Ê½Ö®Ãû³Æ¡£Ò»¸öÕýÈ·µÄº¯Ê½Ãû³Æ¿É°üÀ¨Ò»ÐòÁеÄ×Ö
ĸ¡¢Êý×Ö¡¢Ï±êÏß (underscores)£¬µ«ÊDz»¿ÉÓÃÊý×Ö×ö¿ªÍ·¡£
parameter-list ÊÇÁгöº¯Ê½µÄÈ«²¿ÒýÊý(argument)£¬¸÷¸öÒýÊýÖ®
¼äÒÔ¶ºµã¸ô¿ª¡£
body-of-function °üº¬ gawk µÄÐðÊö (statement)¡£ËüÊǺ¯Ê½¶¨Òå
Àï×îÖØÒªµÄ²¿·Ý£¬Ëü¾ö¶¨º¯Ê½Êµ¼ÊÒª×öºÎÖÖÊ¡£
9.2 º¯Ê½¶¨ÒåµÄÀý×Ó
ÏÂÃæÕâ¸öÀý×Ó£¬»á½«Ã¿¸ö¼Ç¼µÄµÚÒ»¸öÀ¸Î»Ö®ÖµµÄƽ·½ÓëµÚ¶þ¸ö
À¸Î»Ö®ÖµµÄƽ·½¼ÓÆðÀ´¡£
{print "sum =",SquareSum($1,$2)}
function SquareSum(x,y) {
sum=x*x+y*y
return sum
}
µÚʮՠ¡õÀý
ÕâÀォÁгö gawk ³ÌʽµÄһЩÀý×Ó¡£
gawk '{if (NF > max) max = NF}
END {print max}'
´Ë³Ìʽ»áÓ¡³öËùÓÐÊäÈëÐÐÖ®ÖУ¬À¸Î»µÄ×î´ó¸öÊý¡£
gawk 'length($0) > 80'
´Ë³Ìʽ»áÓ¡³öÒ»Ðг¬¹ý 80 ¸ö×ÖÔªµÄÿһÐС£´Ë´¦Ö»ÓÐ pattern ±»
Áгö£¬action ÊDzÉÓÃÄÚ¶¨µÄ print¡£
gawk 'NF > 0'
¶Ôì¶ÓµÓÐÖÁÉÙÒ»¸öÀ¸Î»µÄËùÓÐÐУ¬´Ë³Ìʽ½Ô»áÓ¡³ö¡£ÕâÊÇÒ»¸ö¼ò
µ¥µÄ·½·¨£¬½«Ò»¸öµµ°¸ÀïµÄËùÓпհ×ÐÐɾ³ý¡£
gawk '{if (NF > 0) print}'
¶Ôì¶ÓµÓÐÖÁÉÙÒ»¸öÀ¸Î»µÄËùÓÐÐУ¬´Ë³Ìʽ½Ô»áÓ¡³ö¡£ÕâÊÇÒ»¸ö¼ò
µ¥µÄ·½·¨£¬½«Ò»¸öµµ°¸ÀïµÄËùÓпհ×ÐÐɾ³ý¡£
gawk 'BEGIN {for (i = 1; i <= 7; i++)
print int(101 * rand())}'
´Ë³Ìʽ»áÓ¡³ö¡õΧÊÇ 0 µ½ 100 Ö®¼äµÄ 7 ¸öÂÒÊýÖµ¡£
ls -l files | gawk '{x += $4}; END {print "total bytes: " x}'
´Ë³Ìʽ»áÓ¡³öËùÓÐÖ¸¶¨µÄµµ°¸Ö®bytesÊýÄ¿µÄ×ܺ͡£
expand file | gawk '{if (x < length()) x = length()}
END {print "maximum line length is " x}'
´Ë³Ìʽ»á½«Ö¸¶¨µµ°¸Àï×һÐеij¤¶ÈÓ¡³ö¡£expand »á½« tab ¸Ä
³É space£¬ËùÒÔÊÇÓÃʵ¼ÊµÄÓұ߽çÀ´×ö³¤¶ÈµÄ±È½Ï¡£
gawk 'BEGIN {FS = ":"}
{print $1 | "sort"}' /etc/passwd
´Ë³Ìʽ»á½«ËùÓÐʹÓÃÕßµÄloginÃû³Æ£¬ÒÀÕÕ×ÖĸµÄ˳ÐòÓ¡³ö
gawk '{nlines++}
END {print nlines}'
´Ë³Ìʽ»á½«Ò»¸öµµ°¸µÄ×ÜÐÐÊýÓ¡³ö¡£
gawk 'END {print NR}'
´Ë³ÌʽҲ»á½«Ò»¸öµµ°¸µÄ×ÜÐÐÊýÓ¡³ö£¬µ«ÊǼÆËãÐÐÊýµÄ¹¤×÷ÓÉgawk
À´×ö¡£
gawk '{print NR,$0}'
´Ë³Ìʽӡ³öµµ°¸µÄÄÚÈÝʱ£¬»áÔÚÿÐеÄ×îÇ°ÃæÓ¡³öÐкţ¬ËüµÄ¹¦
ÄÜÓë 'cat -n' ÀàËÆ¡£
µÚʮһÕ ½áÂÛ
gawk ¶Ôì¶×ÊÁϵĴ¦Àí¾ßÓкÜÇ¿µÄ¹¦ÄÜ¡£ËüÄܹ»ÒԺ̵ܶijÌʽÍê³É
ÏëÒª×öµÄÊ£¬ÉõÖÁÒ»»ò¶þÐеijÌʽ¾ÍÄÜÍê³ÉÖ¸¶¨µÄ¹¤×÷¡£Í¬ÑùµÄÒ»¼þ
¹¤×÷£¬ÒÔ gawk ³ÌʽÀ´Ð´»á±ÈÓÃÆäËü³ÌʽÓïÑÔÀ´Ð´¶ÌºÜ¶à¡£
gawk ÊÇ GNU Ëù×öµÄ awk£¬ËüÊǹ«ÖÚÈíÌå(Public Domain) ¿ÉÃâ·Ñʹ

--
================================================================
ID: dfbb NICKNAME:ÕÔÎÞ¼É REALNAME:·½ºº
----------------------------------------------------------------
°®ºÃ:GAME,Linux, PC Email: fangh@csun01.ihep.ac.cn
ÎäÏÀ,¹ÅÎÄ Clinux Homepage:http://csun01.ihep.ac.cn/linux/
================================================================
¡ù ÐÞ¸Ä:¡¤dfbb ì¶ Nov 11 15:22:42 Ð޸ı¾ÎÄ¡¤[FROM: ie0.ie.ac.cn]
¡ù ÐÞ¸Ä:¡¤dfbb ì¶ Nov 11 15:23:00 Ð޸ı¾ÎÄ¡¤[FROM: ie0.ie.ac.cn]
¡ù ÐÞ¸Ä:¡¤dfbb ì¶ Nov 11 15:23:38 Ð޸ı¾ÎÄ¡¤[FROM: ie0.ie.ac.cn]
¡ù ÐÞ¸Ä:¡¤dfbb ì¶ Nov 13 20:50:03 Ð޸ı¾ÎÄ¡¤[FROM: ie0.ie.ac.cn]
¡ù À´Ô´:¡¤BBS ˮľÇ廪վ bbs.net.tsinghua.edu.cn¡¤[FROM: ie0.ie.ac.cn]
BBSˮľÇ廪վ¡Ã¾«»ªÇø