[英]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.