o awk ¸í·É¾î
awk¶ó´Â À̸§Àº À̸¦ °³¹ßÇÑ ¼¼ »ç¶÷ÀÇ À̸§ Aho, Weinberger, Kernighan¿¡¼ À¯·¡µÈ °ÍÀÌ´Ù.
awk¸í·É¾î´Â ÀÏ·ÃÀÇ ÀÔ·Â ÈÀÏÀ» Àоî ÁöÁ¤µÈ ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ» °£Á÷ÇÑ ¶óÀÎÀ» ã´Â´Ù.
ÆÐÅÏÀÌ ÀÏÄ¡Çϸé ÁöÁ¤µÈ ¿¬»êÀÌ ½ÇÇàµÈ´Ù. ¿©±â¼ÀÇ ¿¬»êÀº ¶óÀÎ ³»ÀÇ Çʵå Á¶ÀÛÀ̳ª Çʵ尪À»
ÀÌ¿ëÇÑ »ê¼ú ¿¬»êÀ» ÀǹÌÇÑ´Ù. ÀÌ awk´Â shell programming°ú bc ±×¸®°í C ÇÁ·Î±×·¡¹Ö¾ð¾îÀÇ ±â´ÉÀ» °®Ãá
ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î bc¿Í °°ÀÌ ¿Ïº®ÇÏ°Ô Çص¶ÀÌ µÇ¸ç ½©ÀÇ ÀμöÀÎ $1, $2, $3°ú °°Àº À̸§À» °¡Áø
ÇÊµå º¯¼ö°¡ °¢ ÀÔ·Â ¶óÀο¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¶Ç C ¾ð¾î¿Í À¯»çÇÑ ÇÁ¸°ÆÃ, Á¦¾î ¿¬»êÀÚµµ °¡Áö°í ÀÖ´Ù.
awkÀÇ »ç¿ë¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ÇÑ°¡Áö ¹æ¹ýÀº ´ÙÀ½ Çü½ÄÀ¸·Î ŸÀÌÇÁÇÏ´Â °ÍÀÌ´Ù.
# awk program filename --> program: ¸í·É¾îµé·Î ÀÌ·ç¾îÁü
filename: awk°¡ ÀÛ¿ëÇÒ ÈÀÏÀÇ ¸íĪ
# awk -f file filename --> file: ÇÁ·Î±×·¥ ¸í·É¾îµéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â ÈÀÏÀÇ ¸íĪ
ÇÁ·Î±×·¥Àº Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÇÁ·Î±×·¥ ¶óÀεé·Î ÀÌ·ç¾îÁø´Ù. ÇÁ·Î±×·¥ ¶óÀÎÀº ÀϹÝÀûÀ¸·Î
ÆÐÅÏ°ú ÀÛ¿ëÀ¸·Î ÀÌ·ç¾îÁø´Ù.
/rotate/ {print} --> ÆÐÅÏÀº rotate(´Ü¼øÇÑ ¹®ÀÚ¿ ÆÐÅÏÀº /µé·Î µÑ·¯½ÎÀÓ)
ÀÛ¿ëÀº printÀÌ´Ù.
ÀÌ°ÍÀ» »ç¿ëÇϸé , awk ÇÁ·Î±×·¥Àº ¹®ÀÚ¿ rotate¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ¶óÀεéÀ» ¹ß°ßÇÏ°í ±×°ÍµéÀ» ÇÁ¸°Æ®ÇÑ´Ù.
±×°ÍÀº grep rotate filenameÀ» »ç¿ëÇÏ´Â °Í°ú °°´Ù.
ÇʵåµéÀº °ø¹éµé¿¡ ÀÇÇØ ºÐ¸®µÈ ¹®ÀÚ¿µéÀÌ´Ù.
awk ÇÁ·Î±×·¥Àº Çʵ忡 ´ëÇÑ ·¹ÀÌºí ½Ã½ºÅÛÀ» °¡Áö°í ÀÖ´Ù. $1Àº ù ¹ø° ÇʵåÀÌ°í $2Àº µÎ ¹ø° ÇʵåÀÌ´Ù.
$0Àº Ư¼öÇÑ Àǹ̸¦ °®´Â¹Ù, ±×°ÍÀº Àüü ¶óÀÎÀ» ³ªÅ¸³½´Ù.
---------------------------------------------------------------------------------------------
ÆÐ ÅÏ ÀÇ ¹Ì
---------------------------------------------------------------------------------------------
/fish/ ¹®ÀÚ¿ fish¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ¶óÀÎ
$1 - /fish/ ù¹ø° Çʵ尡 ¹®ÀÚ¿ fish¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ¶óÀÎ
$3 - /fish/ ¼¼¹ø° " "
$1! - /fish/ ù¹ø° Çʵ尡 ¹®ÀÚ¿ fish¸¦ Æ÷ÇÔÇÏ°í ÀÖÁö ¾ÊÀº ¶óÀÎ
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
ÀÛ ¿ë ÀÇ ¹Ì
---------------------------------------------------------------------------------------------
{print $2} µÎ¹ø° Çʵ常À» ÇÁ¸°Æ®Ç϶ó
{print $4,$2} ³×¹ø° ÇʵåÀÇ ³»¿ëÀ» ÇÁ¸°Æ®ÇÑ ´ÙÀ½ µÎ¹ø° ÇʵåÀÇ ³»¿ëÀ» ÇÁ¸°Æ®Ç϶ó
{print $2,$2+$4} µÎ¹ø° Çʵ带 ÇÁ¸°Æ®ÇÑ ´ÙÀ½ µÎ¹ø° Çʵå¿Í ³×¹ø° ÇʵåÀÇ ÇÕÀ» ÇÁ¸°Æ®Ç϶ó
{s=$2+$4; print s} µÎ¹ø°¿Í ³×¹ø° Çʵ带 Ãß°¡ÇÑ ´ÙÀ½, ±× ÇÕÀ» ÇÁ¸°Æ®Ç϶ó
---------------------------------------------------------------------------------------------
ÆÐÅÏ¿¡¼ÀÇ ~¿Í !»ç¿ë¿¡ ÁÖ¸ñÇ϶ó. ~´Â ¿ìÃø¿¡ ÀÖ´Â ÆÐÅÏÀÌ ÁÂÃø¿¡ ÀÖ´Â Çʵ忡 Æ÷ÇԵȴٴ °ÍÀ» ÀǹÌÇÑ´Ù.
!~ Á¶ÇÕÀº ¿ìÃøÀÇ ÆÐÅÏÀÌ ÁÂÃøÀÇ Çʵ忡 Æ÷ÇÔµÇÁö ¾ÊÀ½À» ÀǹÌÇÑ´Ù.
{ }ÀÛ¿ëµéÀ» ¼¼¹ÌÄÝ·ÐÀ¸·Î ºÐ¸®½ÃÅ´À¸·Î½á Çϳª ÀÌ»óÀÇ ÀÛ¿ëµéÀ» Æ÷ÇÔ½ÃÅ´ ¼ö ÀÖ´Ù.
¸î°¡Áö ÀÌ·¯ÇÑ °³³äµéÀ» »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹¸¦ °íÂûÇغ¸ÀÚ. ÈÀÏ sales´Â ¿©¼¸ ¿ÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù.
ù¹ø° ¿Àº Ç°¸ñ ¸íĪ, µÎ¹ø° ¿Àº Ç°¸ñÀÇ ÆǸŰ¡°Ý , ±×¸®°í ´ÙÀ½ÀÇ ³× ¿µéÀº Ç°¸ñ¿¡ ´ëÇÑ ºÐ±âº°
ÆǸżöÀÌ´Ù.
# vi sales
carts 29.99 45 13 55 22
corks 0.02 30 20 25 93
doors 49.99 40 15 20 25
geese 15.00 2 8 1 128
nighties 50.00 11 23 15 82
¿ì¸®´Â µÎ ¿À» Ãß°¡ÇÏ·Á ÇÑ´Ù. Ç°¸ñÇÕ°è ±×¸®°í Çö±Ý ÆǸŠÇÕ°è.
´ÙÀ½°ú °°Àº addupÀ̶ó´Â ÈÀÏÀ» ÀÛ¼ºÇÑ´Ù.
# vi addup
{total=$3+$4+$5+$6;print $0, total, total*$2}
ÀÌ ÀÛ¿ëÀº ;¿¡ ÀÇÇØ ºÐ¸®µÈ µÎ ºÎºÐµéÀ» °¡Áö°í ÀÖ´Ù. ù ºÎºÐÀº ÆǸżö¸¦ ÇÕÇÏ°í ¿µ¸®ÇÏ°Ôµµ Çհ踦
totalÀ̶ó ºÎ¸¥´Ù. µÎ¹ø° ºÎºÐÀº ¿ø·¡ÀÇ ¶óÀÎ($0)À» ÇÁ¸°Æ®ÇÏ°í, ±× µÚ¿¡ Çհ踦 , ±× ´ÙÀ½¿¡´Â
total*$2¸¦ ÇÁ¸°Æ®Çϴµ¥, ÀÌ°ÍÀº ÇÕ°èxµÎ¹ø° ¿À» ÀǹÌÇÑ´Ù.
# awk -f addup sales
carts 29.99 45 13 55 22 135 4040.64
corks 0.02 30 20 25 93 93 3.36
doors 49.99 40 15 20 25 100 4999
geese 15.00 2 8 1 128 139 2085
nighties 50.00 11 23 15 82 131 6550
o awk ÀÔ·Â ¶óÀÎÀ» Àд ¹æ¹ý
Ç¥ÁØ ÀÔ·ÂÀ̳ª ÈÀϷκÎÅÍ ÀÐÇôÁö´Â °¢ ¶óÀÎÀº °ø¹é¹®ÀÚ·Î ±¸ºÐµÈ Çʵ带 °¡Áö°í ÀÖ´Â °ÍÀ¸·Î °£ÁֵȴÙ.
-F(field)¼±ÅÃÀÚ µÚ¿¡ ÀÓÀÇÀÇ ¹®ÀÚ¸¦ ÀÔ·ÂÇϸé ÇÊµå ±¸ºÐÀÚ°¡ ±× ¹®ÀÚ·Î º¯°æµÈ´Ù.
¿¹¸¦ µé¾î :(ÄÝ·Ð)À» ±¸ºÐÀÚ·Î »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
# awk -F: -f prog files
o awkÀÇ ÆÐÅÏ°ú ¿¬»ê
awk°¡ ÀоîµéÀÌ´Â ¶óÀΰú Çʵåµé¿¡ ´ëÇÑ ÀÛ¾÷Àº ÆÐÅÏ-¿¬»êÀÇ ½ÖÀ¸·Î Á¤ÀǵǸç À̽ÖÀº ´ÙÀ½°ú °°Àº
Çü½ÄÀ» °®´Â´Ù.
pattern {action}
¿¬»ê ºÎºÐÀ» Áß°ýÈ£·Î µÑ·¯½ÓÀ¸·Î½á ÆÐÅÏ°ú ±¸ºÐÇÑ´Ù. ¿¬»ê ºÎºÐÀÌ »ý·«µÇ¸é ±× ¶óÀÎÀÌ ÇÁ¸°Æ®µÈ´Ù.
ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ¿¬»ê¿¡´Â print°¡ ÀÖÀ¸¸ç ÀÌ ¿¬»êÀº Àμö¸¦ Ç¥ÁØ Ãâ·Â¿¡ Ãâ·ÂÇÑ´Ù.
´ÙÀ½¿¬»êÀº ÀÔ·Â ÇÊµå °³ÀÇ ¼ø¼¸¦ ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
{ print $2, $1}
# vi in.file
hello goodbye again
111 222
thirty forty
# vi awk.prog1
{print $2, $1}
# awk -f awk.prog1 in.file
goodbye hello
222 111
forty thirty
À§ÀÇ ¿¹¿¡¼ printÀÇ Àμö´Â ÄÞ¸¶·Î ±¸ºÐµÇ¾úÀ¸¸ç ÀÌ·Î ÀÎÇØ Ãâ·Â µ¥ÀÌÅÍ »çÀÌ¿¡ ÇöÀçÀÇ ÇÊµå ±¸ºÐÀÚ°¡
»ðÀԵǾú´Ù. ÄÞ¸¶°¡ »ý·«µÇ¸é $1°ú $2°¡ ¿¬¼ÓÇÏ¿© Ãâ·ÂµÈ´Ù.
¿¹¸¦ µé¾î ´ÙÀ½ÀÇ awk ÇÁ·Î±×·¥Àº
# vi awk.prog2
/hello/ {print $2, $1}
# awk -f awk.prog2 in.file --> ÀÔ·Â ÈÀÏ ³»¿¡¼ ÆÐÅÏ /hello/°ú ÀÏÄ¡ÇÏ´Â ¶óÀÎÀº 1°³»ÓÀ̱â
goodbye hello ¶§¹®¿¡ ±× ¶óÀο¡ ´ëÇؼ¸¸ ÁöÁ¤µÈ ¿¬»êÀÎ print°¡ ½ÇÇàµÇ¾ú´Ù.
# vi awk.prog3
/hello/ {print $2, $1}
/thirty/ {print $1, $2, "and more"}
# awk -f awk.prog3 in.file --> print¸í·É¾îÀÇ Àμö°¡ µû¿ÈÇ¥·Î µÑ·¯½Î¿© Á¦°øµÇ¾úÀ¸¸ç ±× ¹®ÀÚ¿ÀÌ
goodbye hello Ãâ·Â¿¡ Ç¥½ÃµÇ¾ú´Ù.
thirty forty and more
# vi awk.prog4
/hello/||/111/ {print "htt", $1, $2}
# awk -f awk.prog4 in.file --> ||¿¬»êÀÚ´Â 2°³ÀÇ Á¤±Ô½Ä Áß Çϳª¸¸ ÀÏÄ¡Çϸé ÁöÁ¤µÈ ¿¬»êÀ» ½ÇÇàÇϸç
hit hello goodbye &&¿¬»êÀÚ´Â 2°³ÀÇ Á¤±Ô½ÄÀÌ ¸ðµÎ ÀÏÄ¡¾ÖÇá ÁöÁ¤ ¿¬»êÀ» ½ÇÇàÇÑ´Ù.
hit 111 222 !¿¬»êÀÚ´Â Á¤±Ô½ÄÀÌ ÀÏÄ¡ÇÏÁö ¾Ê¾Æ¾ß ÁöÁ¤µÈ ¿¬»êÀ» ½ÇÇàÇϸç
Á¤±Ô½Ä ¾Õ¿¡ ±â¼úµÈ´Ù.
# vi awk.prog5
/^[Hh1]/ {print "htt", $0}
# awk -f awk.prog5 in.file --> $0À» »ç¿ëÇ߱⠶§¹®¿¡ ÀÔ·Â ¶óÀÎ Àüü°¡ Ãâ·ÂµÇ¾úÀ½
hit hello goodbye again Hh1À¸·Î ½ÃÀÛÇÏ´Â lineÀ» Ãâ·Â
hit 111 222
# vi awk.prog6
/hello/ {
print $2
print "another"
print $1
}
# awk -f awk.prog6 in.file --> ÆÐÅÏ /hello/¿Í ÀÏÄ¡Çϴ ù¹ø° ÀÔ·Â ¶óÀθ¸ÀÌ ¿¬»êÀÇ ´ë»óÀÌ µÊ
goodbye
another
hello
o awk¸¦ ÀÌ¿ëÇÑ ¼ýÀÚ ¿¬»ê
awkÀÇ »ê¼ú ¿¬»êÀÌ bcÀÇ »ê¼ú ¿¬»ê°ú ´Ù¸¥ Á¡Àº awk´Â ÀÔ·Â ÈÀÏ ³»ÀÇ ¶óÀÎ Áß ÀϺθ¦ ¼±ÅÃÇÏ´Â
ÆÐÅÏ ºÎºÐÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
¿¹¸¦ µé¾î awkÀÇ ³»Àå ÇÔ¼öÀÎ length´Â ¹®ÀÚ¿·Î Ãë±ÞµÇ´Â ÀÔ·Â ÇʵåÀÇ ±æÀ̸¦ ¹ôȯÇÏ¸ç ¼ýÀÚ º¯¼ö´Â
¼ýÀÚ·Î Ãë±ÞµÇ´Â ÇʵåÀÇ °ªÀ» ÇÒ´ç¹ÞÀ» ¼ö ÀÖ´Ù.
# vi awk.prog7
{
s += $2
print $2, "length=" length($2), "s=" s
}
# awk -f awk.prog7 in.file --> ¼ýÀÚ·Î º¯È¯µÉ¼ö ¾ø´Â ¹®ÀÚ¿Àº °ªÀÌ 0ÀÌ µÈ´Ù.
goodbye length=7 s=0 ¹®ÀÚ¿ thirty°¡ ±× ¿¹·Î¼, ¼ýÀÚ·Î º¯È¯µÉ¼ö ¾ø´Ù. ±×·¯³ª ¹®ÀÚ¿
222 length=3 s=222 222´Â ¼ýÀÚ·Î ¿Ã¹Ù¸£°Ô º¯È¯µÇ¾ú´Ù. ¶ÇÇÑ s=0°ú °°Àº Çü½ÄÀ¸·Î º¯¼ö¿¡
forth length=5 s=222 °ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº awkº¯¼öÀÇ ¿ç¹Ù¸¥ ¿¹ÀÌ´Ù.
s
S
SS
S1
qwerty[42]
º¯¼ö¸¦ »ç¿ëÇϱâ Àü¿¡ ¼±¾ðÇϰųª ÃʱâȽÃų ÇÊ¿ä´Â ¾ø´Ù. awk°¡ ÀÚüÀûÀ¸·Î º¯¼ö¸¦ ÃʱâȽÃÅ°¸ç
ÇÊ¿ä¿¡ µû¶ó ±× º¯¼ö¸¦ ¹®ÀÚ¿À̳ª ¼ýÀÚ¸¦ ±â¾ï½Ãų¼ö ÀÖ´Ù.
# vi awk.prog8
/hello/ {
SSS=34
print "SSS is", SSS
SSS=hello
print "SSS is", SSS
}
# awk -f awk.prog8 in.file --> ÀÌ¿Í °°Àº ÀÚµ¿ÀûÀÎ º¯¼ö Çü½Ä º¯È¯Àº º¯¼öÀÇ »ç¿ëÀ» ¼ö¿ùÇÏ°Ô ÇÑ´Ù.
SSS is 34
SSS is hello
o 󸮸¦ ½ÃÀÛÇÏ°í ³¡³»±â À§ÇÑ Æ¯¼ö ÆÐÅÏ
Á¤±Ô½Ä ÆÐÅÏ ¿Ü¿¡µµ 2°³ÀÇ Æ¯¼ö ÆÐÅÏÀ¸·Î BEGIN°ú END°¡ »ç¿ëµÈ´Ù. BEGINÀº ù ¹ø° ÀÔ·Â ¶óÀÎÀ»
Àбâ Àü¿¡ awkÇÁ·Î±×·¥ÀÇ ¼±µÎ¿¡¼ ½ÇÇàµÇ¸ç END´Â ¸¶Áö¸· ÀÔ·Â ¶óÀÎÀÌ Ã³¸®µÈ ÈÄ ÇÁ·Î±×·¥ÀÇ Á¦ÀÏ
³¡¿¡¼ ½ÇÇàµÈ´Ù.
BEGINÀº ÁÖ·Î º¯¼ö ÃʱâÈ µîÀÇ ÀÛ¾÷¿¡ »ç¿ëµÇ¸ç END´Â ¸¶Áö¸· °è»êÀ» ÇÏ°í Ãâ·ÂÀ» ¿ä¾àÇÏ´Â ÀÛ¾÷¿¡
»ç¿ëµÈ´Ù. BEGINÀ̳ª END°¡ ¾ø¾îµµ µÇ³ª ÇÊ¿äÇÑ °æ¿ì Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î ´ÙÀ½ ÇÁ·Î±×·¥Àº ¿©·¯ °³ ¼ýÀÚÀÇ Æò±Õ°ªÀ» Ãâ·ÂÇÑ´Ù.
BEGIN {
print "Beginning to process the input data ..."
}
{
s += $1
n++
}
END {
print "mean of these",n,"data items is", s/n
}
¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÏ´Â BEGIN°ú °ü·ÃµÈ ¿¬»êÀº ÇÁ·Î±×·¥ÀÇ ¼±µÎ¿¡¼ ½ÇÇàµÇ¸ç ±× ÈÄ¿¡ °¢ ÀԷ¶óÀÎÀÌ
ÀÐÇôÁø´Ù. ÆÐÅÏÀÌ »ý·«µÇ¾ú±â ¶§¹®¿¡ ¸ðµç ÀÔ·Â ¶óÀο¡ ´ëÇØ ¿¬»êÀÌ ½ÇÇàµÇ¾ú´Ù.
ù ¹ø° Çʵ带 º¯¼ö s¿¡ ´õÇÏ°í 1À» Áõ°¡½ÃÅ°¸ç ¸¶Áö¸·ÀÇ ENDÆÐÅÏÀº ¸ðµç ÀÔ·ÂÀÌ Ã³¸®µÈ ÈÄ ½ÇÇàµÈ´Ù.
ÀÌ END ÆÐÅÏ¿¡¼´Â °è»êÀÇ ÃÖÁ¾ °á°ú¸¦ Ãâ·ÂÇÏ°í ÀÖ´Ù.
|