【发布时间】:2014-09-26 23:14:04
【问题描述】:
我在shell脚本中有以下代码:首先计算列数(变量numCol),然后将其插入awk中的for循环以检查每行中的所有值是否全为0:
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"
【问题讨论】:
-
您得到了答案,但 shell 脚本没有意义。假设
$line包含从脚本中显示的输入文件的名称,您需要在 awk 中打印包含零或空格以外的其他内容的行。 -
@ed,好主意,但要迂腐,还有其他“零”值:
printf "%s\n" 0 0.0 0e0 0e-1 | awk '$1 != 0' -
@glennjackman 也是一个好点。他没有说
all equal to zero,但他说all 0s,所以我认为我的建议会奏效。一些示例输入和预期输出肯定会告诉我们。 -
我同意。有时我会挑毛病。只要问我的妻子......
-
每行末尾的
$令人费解;我认为他们不应该在场。