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) 并将其写入文件。
我一直在努力排序然后删除数据,但这似乎非常低效。
谢谢你的帮助
使用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)
首先,我们设置min和max变量作为第4列的第1行中的值,以后我们将在第4栏第检查每个值,看它是否小于当前值min或以上的电流值max,如果是这样设置min于该价值。
然后我们创建一个sum变量,其中包含第 4 列的所有值的总和。稍后将用于通过将总和除以总行数来计算平均值。
最后,我们打印最大值、最小值和平均值。
与米勒
$ mlr --nidx --repifs stats1 -a 'min,max,mean' -f 4 data
1 8 4.250000
Run Code Online (Sandbox Code Playgroud)
您可以通过添加以通常的方式将输出重定向到文件 > file
$ datamash -W min 4 max 4 mean 4 < data
1 8 4.25
Run Code Online (Sandbox Code Playgroud)