0

これは私のコードです:

grep $to_check $forbidden >${dir}variants_of_interest;

cat ${dir}variants_of_interest | (while read line; do 
     #process ${line} and echo result
done;
)

grep のおかげで、ループ内で個別に処理するデータ行を取得できます。ファイルvariants_of_interestを使用する代わりに変数を使用したいと思います。

この理由は、何千回もファイルに書き込む (そしてその結果としてファイルから読み取る) と計算が急速に遅くなるのではないかと心配しているためです。どう思いますか?

何千ものgrepコマンドを実行する必要があり、variants_of_interestには最大10行しか含まれていません.

ご提案いただきありがとうございます。

4

3 に答える 3

3

grepその出力をループに直接渡すことができます:

grep "$to_check" "$forbidden" | while read line; do 
  #process "${line}" and echo result
done

あなたの例では明示的なサブシェルを削除しました。これは、配管のために既に別のサブシェルになっているためです。$lineまた、使用時に空白が展開されないように、変数を引用符で囲むことを忘れないでください。

于 2012-11-19T13:51:42.243 に答える
2

ファイルを書く必要はありません。grep の結果を反復するだけです。

grep $to_check $forbidden | (while read line; do 
     #process ${line} and echo result
done;
)
于 2012-11-19T13:50:31.610 に答える
0

This might work for you:

OIFS="$IFS"; IFS=$'\n'; lines=($(grep $to_check $forbidden)); IFS="$OIFS"
for line in "${lines[@]}"; do echo $(process ${line}); done

The first line places the results of the grep into the variable array lines.

The second line processes the array lines placing each line into the variable line

于 2012-11-19T14:28:04.253 に答える