如何从第 4 列的值中获取最大值、最小值和平均值

kel*_*g76 2 text-processing numeric-data

我有这样结构的数据

X   43808504    G   1   ^]. <
X   43808505    C   3   .   4
X   43808506    T   8   .   ?
X   43808507    G   5   .   C
Run Code Online (Sandbox Code Playgroud)

我想从第 4 列中获取最大值 (8)、最小值 (1) 和平均值 (4.25) 并将其写入文件。

我一直在努力排序然后删除数据,但这似乎非常低效。

谢谢你的帮助

jes*_*e_b 7

使用awk

awk 'NR == 1 { min = $4; max = $4 }
{
    sum += $4
    if ($4 > max) {
        max = $4
    }
    if ($4 < min) {
        min = $4
    }
} END {
    print max
    print min
    print sum / NR
}' input
Run Code Online (Sandbox Code Playgroud)

首先,我们设置minmax变量作为第4列的第1行中的值,以后我们将在第4栏第检查每个值,看它是否小于当前值min或以上的电流值max,如果是这样设置min价值。

然后我们创建一个sum变量,其中包含第 4 列的所有值的总和。稍后将用于通过将总和除以总行数来计算平均值。

最后,我们打印最大值、最小值和平均值。

  • @Paul_Pedant:不要在空文件上使用它。 (6认同)
  • 如果它是针对一个空文件运行的,它 __should__ 错误 IMO 因为某些事情做错了。 (4认同)

ste*_*ver 6

米勒

$ mlr --nidx --repifs stats1 -a 'min,max,mean' -f 4 data
1 8 4.250000
Run Code Online (Sandbox Code Playgroud)

您可以通过添加以通常的方式将输出重定向到文件 > file

使用GNU datamash

$ datamash -W min 4 max 4 mean 4 < data
1   8   4.25
Run Code Online (Sandbox Code Playgroud)