我在shell脚本中有以下代码:首先计算列数(变量numCol),然后将其插入awk中的for循环中以检查每行中的所有值是否都为0:< / p>
numCol=$(awk '{print NF}' $line | head -n 1)$
awk '{for (i=1; i<=$numCol; ++i) if($i != 0) {print;next}}' $line$
但是,我收到了这个错误:awk: illegal field $(), name "numCol"
答案 0 :(得分:2)
将$numCol
shell变量传递给awk使用-v
选项:
awk -v numCol=$numCol '{for (i=1; i<=numCol; ++i) if($i != 0) {print;next}}'
但是,如果您显示一些示例输入/输出数据,那么我们可以在一个步骤中执行此操作。
答案 1 :(得分:2)
你搞砸了shell变量和awk变量
这个例子告诉所有人:
awk -v awkVar="$shellVar" '{for(i=1;i<=awkVar;i++)...}' ...
名称可能不同,但您应该知道应该在哪个上下文中使用哪个变量。