未だ遠い、perl使いへの道

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