0

我有一个目录,其中包含要一个一个处理的文件,每个输出如下所示:

==== S=721 I=47 D=654 N=2964 WER=47.976% (1422)

然后我想通过管道输出到 AWK 来计算平均百分比(第 6 列)。我宁愿在一个脚本中完成这一切并编写以下代码:

for f in $dir; do
    echo -ne "$f "
    process $f
done | awk '{print $7}' | awk -F "=" '{sum+=$2}END{print sum/NR}'

当我多次运行它时,我经常得到不同的结果,尽管在我看来并没有真正改变。结果几乎总是不正确的。

但是,如果我只将for循环放在脚本中并在命令行上通过管道传递给 AWK,那么结果总是相同且正确的。

有什么区别?如何更改脚本以获得正确的结果?

4

2 回答 2

1

猜测一下你正在尝试做什么,如果没有更多细节,很难说到底出了什么问题。

for f in $dir; do
    unset TEMPVAR
    echo -ne "$f "
    TEMPVAR=$(process $f | awk '{print $7}')
    ARRAY+=($TEMPVAR)
done

for我会将所有值附加到循环内的数组中。现在你所有的百分比都在$ARRAY. 使用您喜欢的任何工具都应该很容易计算平均值。

这也将帮助您进行故障排除。如果数组中的元素太少,${#ARRAY[@]}那么您将知道循环提前终止的位置。

于 2013-10-18T14:57:05.980 回答
0
# To get the percentage of all files
Percs=$(sed -r 's/.*WER=([[:digit:].]*).*/\1/' *)

# The divisor
Lines=$(wc -l <<< "$Percs")

# To change new lines into spaces
P=$(echo $Percs)

# Execute one time without the bc. It's easier to understand
echo "scale=3; (${P// /+})/$Lines" | bc
于 2013-11-27T18:17:58.113 回答