- ベストアンサー
ファイルから検索条件を読み込んでGREPを実行したい
INPUTファイルを以下のように作成します。 >input.txt aaa bbb ccc ・ ・ ・ 特定のディレクトリの複数ファイルに対して grepを順にaaa,bbb,ccc・・・ というようにinput.txtから読み込んで実行し、結果をそれぞれaaa.txt,bbb.txt,ccc.txt・・・ へ出力したいのですが、方法がわからなくて困っています。 どなたかご教授お願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
aaa,bbb,ccc...がgrepの検索条件ということなら、 open(IN,"input.txt"); while($param = <IN>){ open(OUT,">$param.txt"); print OUT `grep $param`; close(OUT); } こんな感じで、バッククォートでコマンドを括ってやると実行結果を取得できます。 ただ、grepの検索条件をそのままファイル名にできるかどうかは検索条件の文字列に依ります。
その他の回答 (3)
- SE-1
- ベストアンサー率57% (26/45)
#えっと、スクリプト書いてる間にすでに他の方から回答がついたようですが・・・せっかく書いたので・・・「素人冗長バージョン」です(苦笑)。 use strict; opendir DIR, "C:\/perl\/oshiete\/grep"; foreach (readdir DIR){ next if /^\./; open (IN2, "< C:\/perl\/oshiete\/grep\/$_"); my @in2 = <IN2>; close IN2; open (IN1, '< input.txt'); foreach my $line (<IN1>){ chomp $line; my @out1 = grep {/$line/} @in2; open (OUT, ">> $line.txt"); print (OUT @out1); close OUT; } close IN1; } close DIR;
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#概ね、こんな感じになろうかと思います。 open(PARA, "<input.txt"); chomp(@cond=<PARA>); close(PARA); foreach(@cond){ open(GREPOUT, "grep $_ *.txt|"); open(RESULT, ">", "$_.txt"); while(<GREPOUT>){ print RESULT ; } close(RESULT); close(GREPOUT); }
- osamuy
- ベストアンサー率42% (1231/2878)
・テキストファイルから1行読み込み。 ・open()によるコマンド実行結果のリダイレクト。 ・テキストファイルへの1行書き出し。 ――について、やり方が解っているなら、目的のスクリプトがかけると思います。 どこらへんでつまずいているかを、補足した方が回答がつきやすいかと。
お礼
INPUTの文字列をchompして読み込んだら、 ほぼ教えていただいたとおりで動きました。 ありがとうございました。