2012-01-02 13 views
0

短いbashスクリプトで助けが必要です。私は約150,000(!)のXMLファイルを含むフォルダを持っています。私は、指定された行を含むすべてのファイルを抽出するスクリプトが必要です。スクリプトは非常に頻繁に使用する必要があるため、できるだけ早くスクリプトを実行する必要があります。bashスクリプトは、特別な行を含むサブフォルダ内のファイルを取得します。

私の最初のアプローチは、grepのを使用して、以下の通りであった:

for f in temp/* 
do 
    if grep "^.*the line which should be equal.*$" "$f" 
    then 
     echo "use this file" 
    else 
     echo "this file does not contain the line" 
    fi 
done 

このアプローチは動作しますが、それは時間がかかりすぎます。誰かがより速いアプローチを知っていますか?別のスクリプト言語がより良い選択肢であれば、それもOKです。

敬具、 マイケル

+2

実行しないように「コマンドあたりのファイル」のすべての可能な場合は、 1つのコマンドで多数のファイルを処理するよりも必然的に遅くなります。 –

答えて

3

あなたはどんなbashのハンドラなしのgrepを使用することができます。

-l, --files-with-matches 
      Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match. (-l is 
      specified by POSIX.) 

ので、これを試してみてください。

grep "the line which should be equal" --files-with-matches temp/* 
常に
+0

"引数リストが長すぎる"というエラーが表示された場合、150kファイルが引数として多すぎる可能性があります。http://mywiki.wooledge.org/BashFAQ/095 –

+0

ありがとうございます。 – Michael

関連する問題