Sorting 如何使用awk计算第2列的中值,第1列有重复的行?
我有一个如下的文件:Sorting 如何使用awk计算第2列的中值,第1列有重复的行?,sorting,awk,multiple-columns,median,Sorting,Awk,Multiple Columns,Median,我有一个如下的文件: 1 , 2.0 1 , 59.0 1 , 0.3 2 , 4.5 2 , 2.3 3 , 15.4 4 , 82.4 4 , 5.7 4 , 9.0 我想找出第2列重复时的中位数,期望输出如下: 1 , 2.0 2 , 3.4 3 , 15.4 4 , 9.0 我如何使用awk和sort来执行此操作?非常感谢 这里是使用awk的一种方法 中位数内容.awk 像这样运行: $awk-f median.awk真正的爱的劳动,+1! BEGIN { FS = OFS = "
1 , 2.0
1 , 59.0
1 , 0.3
2 , 4.5
2 , 2.3
3 , 15.4
4 , 82.4
4 , 5.7
4 , 9.0
我想找出第2列重复时的中位数,期望输出如下:
1 , 2.0
2 , 3.4
3 , 15.4
4 , 9.0
我如何使用awk和sort来执行此操作?非常感谢 这里是使用
awk
的一种方法
中位数内容.awk
像这样运行:
$awk-f median.awk真正的爱的劳动,+1!
BEGIN { FS = OFS = " , " }
function find_med(count, med) {
if(count == 1) {
return med[1];
}
else if(count == 2) {
return ((med[1] + med[2]) / 2);
}
else {
return med[sprintf("%0.f",((count / 2) + 1))];
}
}
NR>1 && $1 != seen {
median = find_med(cnt, total);
print seen, median;
delete total;
cnt = 0
}
{
seen = $1;
total[++cnt] = $2;
}
END {
median = find_med(cnt, total);
print seen, median;
}
$ awk -f median.awk <(sort -nk1,1 -k2,2 -t',' file)
1 , 2.0
2 , 3.4
3 , 15.4
4 , 9.0