2012-11-19 125 views
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行。

感謝您的建議。

回答

2

你不必寫一個文件。

grep $to_check $forbidden | (while read line; do 
    #process ${line} and echo result 
done; 
) 
+0

陣列lines謝謝,這個工作:)我打勾答案隨機你和lynxlynxlynx是幾秒鐘開。 – Perlnika

3

你可以只讓grep直接通過它輸出到循環:

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

我刪除了在你的榜樣明確的子shell,因爲它已經是一個簡單的過的grep的結果迭代由於管道而分開。另外不要忘記引用$line變量來防止空白擴展使用。

+0

非常感謝,這是可行的解決方案。因爲你和林奇只有幾秒鐘的距離,我隨機選擇了答案。 – Perlnika

+0

理想情況下,你應該選擇最好的答案作爲最後一個 - 這兩個不相同。 – lynxlynxlynx

0

這可能會爲你工作:

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

的第一行grep的結果放置到變量數組lines

第二行處理將每個線到可變line