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,我得到了预期的结果。我将其置于循环中,因为我需要一次捕获每个评论,而不是全部一起捕获。

4

2 回答 2

2

发生这种情况是因为for x in $result将遍历每个单词$result- 这就是要做的for事情。

试试这个:

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

read一次只取一条线,这就是你需要的。

于 2012-07-06T14:41:36.437 回答
2

你的问题不是awk部分,而是for部分。当你这样做

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

你会得到

yes
no
maybe
why
not

也就是说,for循环的列表自动以空格分隔。

我想,一种解决方法是将评论用引号括起来;然后for将每个引用的评论视为一个项目。legoscia 的修复(read在 while 循环中使用)对我来说似乎更好。

于 2012-07-06T14:40:13.590 回答