前段时间一个朋友请教我一个关于字符串操作的问题。
一个列表如下:
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实现了要求所要实现的功能。
如果读者有更简洁的方法,或直接使用awk便能实现要求,欢迎指正!
一个列表如下:
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 '{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便能实现要求,欢迎指正!
转载于:https://blog.51cto.com/findingcc/236262