未だ遠い、perl使いへの道
Posted 7月 25th, 2008 by hippos
in
perl勉強中です。昨日仕事でちょこっとした集計をする必要があってperlで書こう思いがんばったのですがわからず時間切れ。結局、awkで書いて間に合わせましたが、う〜ん。まだまだ遠い、perl使いへの道。
awk -v x=$1 -F: 'BEGIN{sum=0;}{a= substr($2,1,8);gsub(/¥//,"",a);\
if(a+0>080701&&a+0<080731){b=substr($2,30,5);sum+=(b+0);}}END{print x "," sum;}' \
/path/to/data/data.txt書いたperlは、
perl -s -wanlF: -e'BEGIN{$smu=0;} \
my $a=substr($F[1],0,8);$a=~s!/!!g;if($a gt "080701" && $a lt "080731") \
{my $b=substr($F[1],29,5); $sum+=$b;}END{print $x.",".$sum;}' -x="$1" \
/path/to/data/data.txt詰まったのが、awkの -v x=$1の部分。-s -x="$1"のスイッチ指定でスクリプト内で$xが参照できるかと思ったのですが
Unrecognized switch: -x=XXXXXXXX (-h will show valid options).
と言われて撃沈。スクリプトの部分を別ファイルに書き出して、
perl -s -anlF: x.pl -x="$1" /path/to/data/data.txtとすればうまくいくのですが、使い捨てだしいちいち別ファイルにスクリプトを書くのもなんなので一つのシェルの中に全部書きたい!結局、悩みに悩み、解決できずawkで書いてみて、「うん、うんそうだよね」みたいな気持ちになってしまった。情けない...帰り際、思いついて
perl -wanlF: -e'BEGIN{$x=shift;$smu=0;} \
my $a=substr($F[1],0,8);$a=~s!/!!g;if($a gt "080701" && $a lt "080731") \
{my $b=substr($F[1],29,5); $sum+=$b;}END{print $x.",".$sum;}' "$1" \
/path/to/data/data.txtとしてみたらうまくいったのだけれどなんかカッコワルイ気します。まぁ、"やり方は一つじゃない"ってのがperlワールドの合い言葉の一つみたいだし、できればいいかという安易な思いもあることはありますよ。
この記事のトラックバックURL:
http://hippos-lab.com/blog/trackback/254










Comments