awk十进制平均值

时间:2015-07-07 12:08:18

标签: bash shell awk

我想写一个脚本,它获取第一列相等的文件的两列的平均值,我用awk做了。它有效,但在输出中有指数格式数据
121323e + 2
然后我将print更改为printf并为float

添加了%f
awk '
    NR>1{
        arr[$1]   += $2
        arr2[$1] += $3
        count[$1] += 1
    }
    END{
        for (a in arr) {
             printf "%4.3f",  a " " arr[a] / count[a] " " arr2[a] / count[a]
        }
    }
' t1.txt  > t2.txt

我对这部分有疑问:

printf "%4.3f",  a " " arr[a] / count[a] " " arr2[a] / count[a]
  • 我想在每个printf行之后输入
  • 输出中不存在空格

输出:

 0001204.0001125.0001118.0001053.0001046.0001039.000901.000822.000815.000808.000750

我想要的

 0001 204.000 1125.000 
 1118.000 1053.000 1046.000 
 1039.000 901.000 822.000 
 815.000 808.000 750

1 个答案:

答案 0 :(得分:2)

假设代码的其余部分符合您的要求,您应该将printf更改为以下内容:

printf "%4.3f %4.3f %4.3f\n",  a, arr[a] / count[a], arr2[a] / count[a]

这里我为每个要插入的值包含了一个格式说明符,并在结尾添加了换行符\n。然后用逗号分隔每个值。