#keywords perl,commandline #title Perl Commandline CookBook = Perl Commandline CookBook = PerlÀº ¸¹Àº ºÐ¾ß¿¡¼­ °­·ÂÇÑ ÈûÀ» °¡Áö°í ÀÖÁö¸¸ ½© Ä¿¸Çµå ¶óÀο¡¼­ ±âÁ¸ÀÇ awk¿Í sedµîÀ» ´ëüÇÏ°í ±×ÀÌ»óÀÇ ¸¹Àº ÀÏÀ» Çس¾ ¼ö ÀÖ´Â °­·ÂÇÑ µµ±¸ÀÔ´Ï´Ù. Ä¿¸Çµå¶óÀÎ ÆÞÀº "¾Æ´Â¸¸Å­ ¾²¸éµÈ´Ù"´Â ÆÞÀÇ ÀåÁ¡À» º¸¿©ÁÖ´Â °¡Àå ÁÁÀº ¿¹ÀÔ´Ï´Ù. Ä¿¸Çµå ¶óÀο¡¼­ ¾µ¼ö ÀÖ´Â ´Ù¾çÇÑ Perl ÆÁÀ» ¸ð¾Æº¾½Ã´Ù. Perl¿ÜÀÇ ´Ù¾çÇÑ ¹æ¹ýµéµµ ÇÔ²² ¸ð¾Æ¼­ ºñ±³Çغ¸´Â °Íµµ ÁÁ°ÚÁÒ? ¹Ù·Î º¹»çÇؼ­ ¾µ ¼ö ÀÖ´Â CookBookÀ» ¸¸µå´Â °ÍÀÌ ¸ñÀûÀθ¸Å­ ÆÁµéÀ» ¹®¼­ÀÇ ¾ÕÀ¸·Î µ¹¸®°í ¹®¼­ÀÇ µÚÂÊ¿¡ Ä¿¸Çµå¶óÀÎ ¿É¼ÇÀ̳ª À¯¿ëÇÑ ¹®¹ý¿¡ ´ëÇØ Ãß°¡ÇÏ°Ú½À´Ï´Ù. -- [pung96] [[DateTime(2007-01-31T14:30:27)]] [[TableOfContents]] == Perl Commandline ¿¹Á¦µé == === ¸¹Àº ÆÄÀϵéÀ» Çѹø¿¡ »èÁ¦Çϱâ === {{{ find -name "*.log" -print | perl -nle unlink find -name "*.log" -exec rm \{\} \; find -name "*.log" -print | xargs rm }}} -exec¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀÌ °£´ÜÇϱâ´Â ÇÏÁö¸¸ °è¼Ó »õ·Î¿î ÇÁ·Î¼¼¼­¸¦ ¶ç¾î¾ß Çϱ⠶§¹®¿¡ perlÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÈξÀ ºü¸¨´Ï´Ù. xargs ¿ª½Ã ¹ÞÀ» ÀÖ´Â ÀÎÀÚÀÇ °³¼ö°¡ ÇÑ°è°¡ Àֱ⠶§¹®¿¡ ¿©·¯¹øÀÇ ÇÁ·Î¼¼½º¸¦ ¶ç¾î¾ß ÇÒ °ÍÀ¸·Î ¿¹»óµË´Ï´Ù. perlÀº ÀÎÀÚ·Î ¹Þ´Â°ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ¸ðµÎ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. 1000°³ Áö¿îÈÄ¿¡ 5ÃÊ ½¬µµ·Ï ÇÒ °æ¿ì {{{ find -name "*.log" -print | perl -nle 'unlink; $.%1000==0 and sleep(10);' }}} * {{{$.}}}Àº ÇöÀçÀÇ ¶óÀιøÈ£ º¯¼öÀÔ´Ï´Ù. === ¿©·¯ÁÙÀÇ µ¥ÀÌÅ͸¦ grepÇϱâ === {{{ perl -0777ne '/(START_FLAG.*?END_FLAG)/s and print $1' list.txt # ÆÄÀÏÀÌ ÀÛÀ»¶§ perl -ne '/START_FLAG/ ... /END_FLAG/ and print;' # ÆÄÀÏÀÌ Å¬¶§ }}} === ¸®½ºÆ® ºñ±³ : º¹ÀâÇÑ comm ±¸ÇöÇϱâ === ±âº» ¾ÆÀ̵ð¾î´Â ¿©·¯ ÆÄÀÏÀ» Àо °¢ ¶óÀÎÀÇ Àû´çÇÑ ÆÐÅÏ È¤Àº Àüü ¶óÀÎÀ» Çؽ¬ Å°·Î ¸¸µé°í ¶óÀÎÀ» Çؽ¬ °ªÀ¸·Î ¸¸µé¾î¼­ °¢°¢ ÆÄÀÏ¿¡ ´ëÀÀµÇ´Â Çؽ¬¿¡ ÀúÀåÇÑ ÈÄ¿¡ Å°°¡ °¢ Çؽ¬¿¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ¿© Ãâ·ÂÇÕ´Ï´Ù. ÆíÀÇ»ó ½ºÅ©¸³Æ®¿¡¼­ ÁÖ·Î »ç¿ëÇÏÁö ¾Ê´Â ½Éº¼¸¯ ·¹ÆÛ·±½º¸¦ »ç¿ëÇß½À´Ï´Ù. * ±âº» ¸®½ºÆ®ºñ±³(comm) comm, grep µîÀ» ÀÌ¿ëÇÑ ½¬¿î ¹æ¹ýµéÀÌ ¸¹±â´Â ÇÏÁö¸¸ ÆÐÅϸÅÄ¡¸¦ ÀÌ¿ëÇÑ ºñ±³¸¦ ´õ ½±°Ô ÀÌÇØÇϱâ À§Çؼ­ Àû¾îº¸¾Ò½À´Ï´Ù. °Ô´Ù°¡ Á¦ °æÇè»óÀ¸·Î´Â perlÀÇ commÀ̳ª grepº¸´Ù »¡¶ú½À´Ï´Ù(¾Æ¸¶ ¸Þ¸ð¸®´Â ´õ ¸¹ÀÌ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.). {{{#!vim perl # list1 °ú list2 ¸ðµÎ¿¡ ÀÖ´Â Ç׸ñ grep -f list2 list1 perl -e '@a{@ARGV}=q(A..Z);while(<>){$a{$ARGV}->{$_}++};for(keys %A){print $_ if $B{$_}}' list1 list2 perl -ne 'BEGIN{@a{@ARGV}=(A..Z)}{$a{$ARGV}->{$_}++}END{for(keys %A){print $_ if $B{$_} } }' ls.log ls.log2 # list1 ¿¡¸¸ ÀÖ´Â Ç׸ñ grep -vf list2 list1 perl -e '@a{@ARGV}=(A..Z);while(<>){$a{$ARGV}->{$_}++};for(keys %A){print $_ unless $B{$_}}' list1 list2 # list1 + list2 cat list1 list2 | uniq perl -e 'while(<>){$A{$_}++};for(keys %A){print $_;};' # ¼Óµµ´Â Á» ´À¸®Áö¸¸ °£´ÜÇÑ ¹æ¹ý perl -e '@s{`cat OLD`}=( ); exists $s{$_} && print for `cat NEW`' }}} 1. {{{$a{@ARGV}=(A..Z)}}} : ÀÎÀÚµé·Î %AÇؽ¬¸¦ ä¿ó´Ï´Ù. $a{ù¹ø°ÀÎÀÚ}="A", $a{µÎ¹ø°ÀÎÀÚ}="B" ·Î Z±îÁö ä¿ï ¼ö ÀÖ½À´Ï´Ù. 1. {{{$a{$ARGV}->{$_}++}}} : {{{<>}}}³ª -n¿É¼ÇÀ¸·Î ÆÄÀÏÀ» ÀÐÀ»¶§ ÇöÀç ÀаíÀÖ´Â ÆÄÀÏÀÇ À̸§ÀÌ $ARGV·Î ÇÒ´çµË´Ï´Ù. À̶§ $a{$ARGV}´Â À§¿¡¼­ ÇÒ´çÇÑ °Íó·³ ÀÎÀÚ¼ø¼­´ë·Î A~Z°ªÀ» °¡Áö°í ÀÌ °ªÀ» ½Éº¼¸¯ ·¹ÆÛ·±½º·Î ÀÌ¿ëÇÏ¿© °á±¹¿¡´Â ù¹ø° ÆÄÀÏÀÇ °æ¿ì %A¿¡ µÎ¹ø° ÆÄÀÏÀº %B¸¦ »ç¿ëÇÕ´Ï´Ù. µû¶ó¼­ ù¹ø° ÆÄÀÏÀÇ °æ¿ì ÀÌ ÄÚµå´Â {{{%A{$_}++ }}} ·Î Çؼ®µË´Ï´Ù. $_´Â ÇöÀç ¶óÀÎ Àüü¸¦ ÀǹÌÇϹǷΠ¶óÀÎÀ» Å°·ÎÇÏ°í °ªÀº ÆíÀÇ»ó 1À» ´õÇÏ´Â ¹æ¹ýÀ» ¾¹´Ï´Ù. 1. ÆÄÀÏÀ» ¸ðµÎ Àо °¢ Çؽ¬¸¦ ä¿îÈÄ %AÀÇ Å°µéÀ» Àо °¢ Å°¿¡´ëÇØ %B¿¡µµ °ªÀÌ Á¸ÀçÇÏ´Â Å°µéÀ» Ãâ·ÂÇϸé %A¿Í %BÀÇ Å° ±³ÁýÇÕÀ» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. * ÆÐÅÏ ¸ÅĪÀ» ÀÌ¿ëÇÑ ºñ±³ {{{ patternÀÌ list1 °ú list2¿¡ ¸ðµÎ ¸ÅÄ¡µÇ´Â Ç׸ñÀÇ list1 Ç׸ñ. ¸»ÀÌ Á» º¹ÀâÇϳ׿ä. perl -e '@A{@ARGV}=qw(L R);while(<>){/(pattern)/ and $A{$ARGV}->{$1}=$_};for(keys %L){print $L{$_} if $R{$_};}' list1 list2 }}} * 3Áߺñ±³ {{{ perl -e '@a{@ARGV}=(A..Z);while(<>){/(pattern)/ and $a{$ARGV}->{$1}=$_};for(keys %A){print $A{$_} if $B{$_}&&$C{$_} }' list1 list2 }}} === ¿¢¼¿Ã³·³ Ä÷³ °è»êÇϱâ === {{{ cat data.txt | perl -ane '{$avr=$F[2]+$F[3];$sum+=$avr;print "Avr is $avr\n";}END{print "Sum is $sum\n";}' cat data.txt | awk '{avr=$1+$2;sum+=avr;print "Avr is "avr;}END{print "Sum is "sum;}' perl -nle '{/(pattern1).*(pattern2)/ and $avr=$1+$2 and $sum+=$avr and print "Avr is $avr"}END{print "Sum is $sum";}' data.txt }}} === ÆÄÀÏ ¼öÁ¤Çϱâ === * oldpatternÀ» newstring·Î ¼öÁ¤ÇÏ°í ±âÁ¸ÀÇ ÆÄÀÏÀº *.bak·Î ¹é¾÷ÇÕ´Ï´Ù. {{{ perl -ibak -pe 's/oldpattern/newstring/g;' }}} === °¢ ¶óÀÎÀÇ ÆÐÅÏ¿¡ µû¶ó ´Ù¸¥ ÆÄÀÏ(pattern.txt)·Î ºÐ·ùÇϱâ === {{{ perl -ne '{/(pattern)/ and $H{$1}.=$_;}END{for(keys %H){open F,">$_.txt";print F $H{$_};close F;}' data.txt }}} * ÆÄÀÏ Àüü¸¦ Çؽ¬¿¡ ³Ö´Â ¹æ¹ýÀ̹ǷΠÆÄÀÏÀÌ Ä¿Áö¸é ¸Þ¸ð¸®¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÕ´Ï´Ù. (¿äÁòÀº ¸Þ¸ð¸®°¡ Ä¿¼­ ¼ö¹é¸Þ°¡¹ÙÀÌÆ®ÀÇ ÆÄÀϵµ ó¸®ÇÒ ¼ö ÀÖÁÒ) === ¼­ºêµð·ºÅ丮 grepÇϱâ === {{{ grep -r pung96 * ¿¡ ´ëÀÀµÇ´Â Ç¥Çö find | perl -nle '$f=$_;-T $f or next;open(F,$f);while(){/pung96/ and print "$f : $_";}' }}} == Perl Commandline Option == == Âü°í¹®Çå ==