0
cat test.txt
#this is comment
line 1
line 2
#this is comment at line 3
line4

脚本:

result=`awk '/^#.*/ { print }' test.txt `

for x in $result
do
echo x
done

期待される出力:

#this is comment
#this is comment at line 3

出力の取得:

#this
is
comment
#this
is
comment
at
line
3

しかし、このコマンドawk '/^#.*/ { print }' test.txtを実行すると、期待どおりの結果が得られます。すべてをまとめてではなく、一度に1つずつコメントをキャプチャする必要があるため、これをループに入れています。

4

2 に答える 2

2

あなたの問題はawk一部ではありませんが、for一部です。あなたがするとき

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

あなたが得るでしょう

yes
no
maybe
why
not

つまり、forループしているリストは自動的にスペースで区切られます。

修正の1つは、コメントを引用符で囲むことだと思います。次にfor、引用された各コメントを単一のアイテムとして扱います。レゴシアの修正(readwhileループで使用)は私にはさらに良いようです。

于 2012-07-06T14:40:13.590 に答える
2

これは、の各単語for x in $resultループするために発生します-それが意図されていることです。$resultfor

代わりにこれを試してください:

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

readここで必要なのは、一度に1行ずつです。

于 2012-07-06T14:41:36.437 に答える