在循环中使用shell脚本混合awk命令并且变量在循环之后不保留它们的值?

时间:2012-04-16 19:45:54

标签: shell awk while-loop

嗨,大家好抱歉这个尴尬的标题,但我觉得这个描述有点微妙。所以这是我的问题,我想在while循环中保持count(i)从awk读取输入,然后在循环后打印i的值。但是在循环之后我变回零。下面是我的程序的简化版本,实际上我也在循环中做了一些字符串匹配,以便跳过一些行,我不会增加。

我试图删除awk并执行另一个普通的while循环,并且我的值保留在循环之后,因此我认为这不是由于某些语法错误。

任何想法都非常感谢!

#!/bin/bash
arr=();
i=0;
awk -F '{print $1}' SOMEFILE | while read var
do
  echo $var;
  arr[i]=$var;
  i=$((i+1));
  echo $i;
done
echo $i;

1 个答案:

答案 0 :(得分:2)

因为while循环位于管道中,所以它作为子进程运行,并且i的值对于该子进程是本地的。有几种方法可以保持价值;使用命名管道而不是在管道中运行,使用进程替换,或使用插值heredoc。以下是后者的一个例子:

while read var; do ... done << EOF
$( awk ... )
EOF