这是我的代码:
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行。
感谢您的建议。
答案 0 :(得分:3)
您可以让grep
将其输出直接传递给循环:
grep "$to_check" "$forbidden" | while read line; do
#process "${line}" and echo result
done
我删除了示例中的显式子shell,因为由于管道,它已经在一个单独的子shell中。另外,不要忘记引用$line
变量以防止在使用时扩展空格。
答案 1 :(得分:2)
你不必写一个文件。只需迭代grep的结果:
grep $to_check $forbidden | (while read line; do
#process ${line} and echo result
done;
)
答案 2 :(得分: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