簡體   English   中英

文件每一行的Shell命令

[英]Shell command on each line of file

我正在嘗試編寫一個Perl腳本,它將執行以下操作:
1.打開一個文件,該文件的每一行包含多個文件的位置(說文件A,文件B)
2.對每個文件執行一個egrep,例如egrep“ module | input | output”
3.將egrep的輸出以相同的文件名A,B等存儲,但存儲在不同的目錄中)

egrep上還有更多限制,但我可以稍后添加。

我的問題是如何執行步驟2和3? 在其中的位置,我在由Perl腳本打開的文件的每一行上執行shell命令。 文件位置為例如design/rtl/name.v ,我希望將egrep的結果存儲在design/fake/name.v

在shell(bash)中生成目錄結果,並將文件一一列出到文件“列表”中的一行,然后直接在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 $_;
        }
    }
}

像這樣循環遍歷文件名:

while read file
do
   egrep "module|imput|ouput" "$file" > "/another/directory/${file##*/}" 
done < fileList.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM