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 我得到了几行数据,然后我在循环中单独处理。我想使用变量而不是使用文件variables_of_interest

这样做的原因是我担心写入文件数千次(并因此读取文件)会迅速减慢计算速度,所以我希望避免写入文件会有所帮助。你怎么看?

我必须执行数千个 grep 命令,而variables_of_interest最多只包含 10 行。

感谢您的建议。

4

3 回答 3

3

您可以grep直接将其输出传递给循环:

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

我在您的示例中删除了显式子shell,因为由于管道,它已经在一个单独的子shell中。也不要忘记引用$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

这可能对您有用:

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

第一行将结果grep放入变量数组lines中。

第二行处理lines将每一行放入变量的数组line

于 2012-11-19T14:28:04.253 回答