前段时间一个朋友请教我一个关于字符串操作的问题。

一个列表如下:
0.12   1
0.23   1
0.78   2
0.979 2
0.345 1
0.25   2
0.88   3
0.96   3
.
.
.
要求:以空格为分隔符,把第二字段相同的行的第一字段相加求平均值。

我想应该使用awk,但单独的使用awk似乎又达不到最终目的。想了一会,我便通过shell结合awk实现了要求所要实现的功能。

#!/bin/bash

awk '{print $2}' list|uniq -c >linshi
while read count second; do
awk    -v a=$second -v b=$count '$2==a{sum += $1};END {print sum/b}' list
done < linshi

rm -f linshi

如果读者有更简洁的方法,或直接使用awk便能实现要求,欢迎指正!