• ベストアンサー

ファイルから検索条件を読み込んでGREPを実行したい

INPUTファイルを以下のように作成します。 >input.txt aaa bbb ccc ・ ・ ・ 特定のディレクトリの複数ファイルに対して grepを順にaaa,bbb,ccc・・・ というようにinput.txtから読み込んで実行し、結果をそれぞれaaa.txt,bbb.txt,ccc.txt・・・ へ出力したいのですが、方法がわからなくて困っています。 どなたかご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

aaa,bbb,ccc...がgrepの検索条件ということなら、 open(IN,"input.txt"); while($param = <IN>){ open(OUT,">$param.txt"); print OUT `grep $param`; close(OUT); } こんな感じで、バッククォートでコマンドを括ってやると実行結果を取得できます。 ただ、grepの検索条件をそのままファイル名にできるかどうかは検索条件の文字列に依ります。

takkan39
質問者

お礼

INPUTの文字列をchompして読み込んだら、 ほぼ教えていただいたとおりで動きました。 ありがとうございました。

その他の回答 (3)

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.4

#えっと、スクリプト書いてる間にすでに他の方から回答がついたようですが・・・せっかく書いたので・・・「素人冗長バージョン」です(苦笑)。 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)
回答No.2

#概ね、こんな感じになろうかと思います。 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)
回答No.1

・テキストファイルから1行読み込み。 ・open()によるコマンド実行結果のリダイレクト。 ・テキストファイルへの1行書き出し。 ――について、やり方が解っているなら、目的のスクリプトがかけると思います。 どこらへんでつまずいているかを、補足した方が回答がつきやすいかと。

関連するQ&A