我正在编写一个unix脚本,它执行awk并管道到while循环。但是出于某种原因,while循环只迭代一次。有人可以指出我缺少的东西吗?
awk '{ print $1, $2}' file |
while IFS=" " read A B
do
echo $B
if [ "$B" -eq "16" ];
then
grep -A 1 $A $1 | python unreverse.py
else
grep -A 1 $A
fi
done
“file”看起来像
cheese 2
elephant 5
tiger 16
答案 0 :(得分:0)
解决方案是替换:
grep -A 1 $A
使用:
grep -A 1 "$A" filename
filename
是您希望grep
读取的任何文件。只是猜测,也许你打算:
grep -A 1 "$A" "$1"
我添加了双引号以防止任何可能的分词。
问题在于,如果没有文件名,grep
命令将读取并使用所有标准输入。它在第一次循环运行时执行此操作。因此,第二次运行没有剩余输入,read A B
失败,循环终止。
我们可以看到同样的问题发生在更少的语句上。这是一个while循环,给出两行输入但只循环一次:
$ { echo 1; echo 2; } | while read n; do grep "$n"; echo "n=$n"; done
n=1
这里,只需在grep
语句中添加一个文件名,我们就会看到while
循环执行两次,应该如下:
$ { echo 1; echo 2; } | while read n; do grep "$n" /dev/null; echo "n=$n"; done
n=1
n=2