Awk - 在单独文件中给出的间隔的平均值

时间:2014-04-23 12:15:41

标签: awk

我有两个文件。

$cat file1.txt
1   5
2   5
3   6
4   7
5   5
8   2

我想报告files2.txt中指定的$ 1列间隔的$ 2列的平均值。

$cat file2.txt
range1  1   3
range2  5   7
range3  2   5
range4  6   8
range5  6   7

期望的输出:

range1  1       3       5.333
range2  5       7       1.667
range3  2       5       5.75
range4  6       8       0.667
range5  6       7       0

请注意,$ 1中的值是连续的整数,但可能缺少某些数字(例如6和7)。在这种情况下,$ 2列中的值假定为0。

理想情况下,我想要一个awk解决方案。非常感谢

1 个答案:

答案 0 :(得分:2)

试试这个:

awk '
NR==FNR { 
    a[$1] = $2; 
    next 
}
{ 
    sum = count = 0; 
    for(x=$2; x<=$3; x++) { 
        sum+=a[x] 
    }
    printf "%s\t%.3f\n", $0, sum/(($3-$2)+1)
}' file1 file2
range1  1   3   5.333
range2  5   7   1.667
range3  2   5   5.750
range4  6   8   0.667
range5  6   7   0.000