【发布时间】:2016-04-06 11:09:22
【问题描述】:
我试图了解循环的文件重定向如何在 shell 中工作,所以我编写了以下代码:
#!/bin/sh
while IFS='' read -r line; do
echo 'reading '$line
awk -F, '{sub(/.*/,"Completed",$2);print}'
done<$1
我给脚本提供了以下输入文件:
hello,hi,how are you
i,am,good
对上述文件运行脚本的输出为:
reading hello,hi,how are you
i Completed good
我期待表单的输出:
reading hello,hi,how are you
hello,Completed,how are you
i Completed good
reading i,am,good
hello,Completed,how are you
i Completed good
为什么循环没有为两行打印“阅读”?而且,为什么第一行没有用 awk 替换?谁能解释一下脚本的输出?
【问题讨论】:
-
你的
awk命令将从标准输入读取,在这种情况下是$1的重定向:所以read读取$1的第一行,然后awk读取剩余的行。也许你希望awk -F, '{sub(/.*/,"Completed",$2);print}' <<< "$line"将$line的内容发送给awk。 -
为什么这条评论不是答案? :)
标签: shell awk stdin io-redirection