0

次の処理を行う Perl スクリプトを作成しようとしています。
1. 各行に複数のファイルの場所を含むファイルを開きます (ファイル A、ファイル B と
します) like egrep "module|input|output"
3. egrep の出力を同じファイル名 A、B などで保存しますが、別のディレクトリに保存します)

egrep にはさらに制約がありますが、後で追加できます。

私の質問は、ステップ 2 と 3 をどのように行うかです。ここで、Perl スクリプトによって開かれたファイルの各行でシェル コマンドを実行します。ファイルの場所は、たとえば、design/rtl/name.vegrep の結果を次の場所に保存したいdesign/fake/name.v

4

2 に答える 2

2

シェル(bash)でディレクトリ結果を作成し、ファイル「リスト」にファイルを1行ずつリストしてから、bashプロンプトでこれを直接入力します

for i in `cat list`;do egrep "string" $i > result/grep${i}; done

これはperlでも同様です。エラー動作はより良くなり、少し速くなるかもしれません: 本当の利点は、余分な動作を簡単に追加できることです。ファイルとして保存し、「perl script list foo」として実行します。ここで、script はスクリプトのファイル名、list はファイルのリストのファイル名、foo は検索対象のパターンです。

#!/usr/bin/perl
#

my ( $file, $pattern ) = @ARGV;

open( my $fh, $file ) || "die $! $file\n";

while (<$fh>) {
    chomp;    #trim newline from filename
    my $togrep = $_;
    open( my $grepfh, $togrep ) || warn "$togrep $!";
    if ($grepfh) {
        open( my $output, ">result/$togrep" ) || die "$togrep $!";
        while ( grep( $pattern, <$grepfh> ) ) {
            print $output $_;
        }
    }
}
于 2013-04-05T08:11:00.080 に答える
1

次のようにファイル名をループします。

while read file
do
   egrep "module|imput|ouput" "$file" > "/another/directory/${file##*/}" 
done < fileList.txt
于 2013-04-05T08:10:45.283 に答える