bash: ((: ave=total/numLines : 除以 0(错误标记为 "numLines ")
bash: ((: ave=total/numLines : division by 0 ( error token is "numLines ")
我正在编写 bash 脚本,但我收到此错误:
bash: ((: ave=total/numLines : division by 0 (error token is "numLines ")
这是我的代码:
total="$( cut -d '|' -f ${array[$index]} folder/${files[$x]} | awk '{ sum += } END { print sum }' )"
numLines="$( cut -d '|' -f ${array[$index]} folder/${files[$x]} | awk 'NF' | wc -l )"
(( ave=total/numLines ))
可以正确计算和打印变量 'ave' 的值,但我一直收到 'division by 0' 错误。我一开始尝试给 'numLines' 赋值,但似乎没有用。
出了什么问题,我该如何解决?
基于@Barmar 和我的评论:
AWK可以提取不同分隔符的字段(不需要cut
):
read -r total ave <<< "$(awk -F '|' -v field=${array[$index]} 'NF { sum += $field; count++ } END {print sum, sum/count}' "folder/${files[$x]}")"
请注意,在 sum += $field
中,美元符号导致变量 field
中保存的字段编号引用该字段的内容。 (它不是 Bash 中使用的变量名称。) -v
参数是将 Bash 变量作为 AWK 变量传递给 AWK 的方法。此处使用的模式 (NF
) 匹配所有非空行并且操作包含在 {}
中。 END
模式很特殊,当所有输入都被消耗时执行。
我正在编写 bash 脚本,但我收到此错误:
bash: ((: ave=total/numLines : division by 0 (error token is "numLines ")
这是我的代码:
total="$( cut -d '|' -f ${array[$index]} folder/${files[$x]} | awk '{ sum += } END { print sum }' )"
numLines="$( cut -d '|' -f ${array[$index]} folder/${files[$x]} | awk 'NF' | wc -l )"
(( ave=total/numLines ))
可以正确计算和打印变量 'ave' 的值,但我一直收到 'division by 0' 错误。我一开始尝试给 'numLines' 赋值,但似乎没有用。
出了什么问题,我该如何解决?
基于@Barmar 和我的评论:
AWK可以提取不同分隔符的字段(不需要cut
):
read -r total ave <<< "$(awk -F '|' -v field=${array[$index]} 'NF { sum += $field; count++ } END {print sum, sum/count}' "folder/${files[$x]}")"
请注意,在 sum += $field
中,美元符号导致变量 field
中保存的字段编号引用该字段的内容。 (它不是 Bash 中使用的变量名称。) -v
参数是将 Bash 变量作为 AWK 变量传递给 AWK 的方法。此处使用的模式 (NF
) 匹配所有非空行并且操作包含在 {}
中。 END
模式很特殊,当所有输入都被消耗时执行。