アプリ版:「スタンプのみでお礼する」機能のリリースについて

INPUTファイルを以下のように作成します。
>input.txt
aaa
bbb
ccc




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

A 回答 (4件)

aaa,bbb,ccc...がgrepの検索条件ということなら、



open(IN,"input.txt");

while($param = <IN>){
open(OUT,">$param.txt");
print OUT `grep $param`;
close(OUT);
}

こんな感じで、バッククォートでコマンドを括ってやると実行結果を取得できます。
ただ、grepの検索条件をそのままファイル名にできるかどうかは検索条件の文字列に依ります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/28 17:36

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



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;
    • good
    • 0

#概ね、こんな感じになろうかと思います。


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);
}
    • good
    • 0

・テキストファイルから1行読み込み。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!