2012-07-06 183 views
0
cat test.txt 
#this is comment 
line 1 
line 2 
#this is comment at line 3 
line4 

腳本:命令在命令行工作,但沒有直通腳本

預期輸出:

#this is comment 
#this is comment at line 3 

獲得輸出:

#this 
is 
comment 
#this 
is 
comment 
at 
line 
3 

但是當我執行此命令awk '/^#.*/ { print }' test.txt, 我得到預期的結果。 我把這個放在循環中,因爲我需要一次捕獲每條評論,而不是全部。

回答

2

這是因爲通過每個$resultfor x in $result將循環 - 這就是for的意思做。

試試這個:

echo "$result" | while read x; do 
    echo "$x" 
done 

read將採取一行的時間,這是什麼您這裏需要。

+0

gotcha,感謝您的代碼。 – phani 2012-07-06 14:45:47

+1

使用bash,你可以使用here-string:'read line; ...;完成<<<「$ result」'。使用管道將while循環放入可能產生不良副作用的子shell中。 – 2012-07-06 19:44:59

2

您的問題不是awk部分,而是for部分。當你做

for x in yes no maybe why not 
do 
    echo x 
done 

你會得到

yes 
no 
maybe 
why 
not 

也就是說,for被遍歷列表會自動爲空格分隔。

我想一個解決方法是用引號包裝註釋;那麼for將把每個引用的註釋視爲單個項目。 legoscia的修復(在一個while循環中使用read)對我來說似乎更好。

+0

你是對的,我錯過了循環的基本邏輯。 – phani 2012-07-06 14:46:33

相關問題