-1

我有一个输入文件,其中每行包含一个值和两个权重。

我想生成两个输出文件 - 根据权重,第一列中的值每行重复一次。这可能最好用一个简短的例子来解释。如果输入文件是:

文件.in:

35   2   0
37   2   3
38   0   4

然后我想生成两个输出文件:

文件.out1:

35 
35
37
37

文件.out2:

37
37
37
38
38
38
38

然后,我将使用这些输出文件根据第二列和第三列中的权重计算第一列的平均值和中位数。

我希望我的问题很清楚。感谢您的任何帮助。

4

2 回答 2

1

如果我理解得很好,您需要平均值和中位数。

平均:

awk '{a+=$1}END{print a/NR}' file.in
36.6667

中位数:

cat file.in | awk '{print $1}' | sort | awk '{a[NR]=$1}END{ b=NR/2; b=b%1?int(b)+1:b; print a[b] }'
37

解释:

简而言之,NR 是一个保持行数的变量,平均而言,您需要每行的总和除以行数。

对于中位数,您希望输入排序并选择中值,但是对于您的输入来说并不是那么简单,因为我将 3 的行数除以 2,您将得到 1.5,因此您需要一个 awk 没有的上限函数所以我正在做b=NR/2; b=b%1?int(b)+1:b;

我希望这有帮助。

于 2014-06-27T13:27:39.980 回答
1

这在awk.

awk '{for(i=0;i<$2;i++) print $1;}' file.in > file.out1

生成第一个文件,并且

awk '{for(i=0;i<$3;i++) print $1;}' file.in > file.out2

生成第二个

从您的问题中不清楚您是否知道如何从这些文件中计算平均值和中位数 - 似乎您只是想创建这些输出文件。让我知道其余的是否给您带来了麻烦,或者上述脚本是否不清楚(我认为它们是不言自明的)。

于 2014-06-27T13:06:38.717 回答