linux 计算标准差,shell计算均值和标准差的工具:datamash
前言
shell下经常需要处理数据,需要计算均值和标准差,最近在分析EXT4的r_await的分布情况,需要计算下在一定的读写模式下,块设备的读延迟分布。
这已不是第一次有类似的需求了,每次都要awk写一坨处理脚本,感觉不爽。
其实我要的东西比较简单, 就是读取多笔记录,通过管道传递给一个工具,该工具就可以将指定字段的均值和标准差计算出来。
...
sdb 0.00 0.00 21.00 93.00 4.02 22.88 483.23 0.31 2.70 9.52 1.16 0.88 10.00
sdb 0.00 0.00 56.00 64.00 12.03 16.00 478.40 1.91 15.90 32.57 1.31 3.67 44.00
sdb 0.00 0.00 55.00 100.00 12.03 25.00 489.24 0.78 5.01 11.42 1.48 1.45 22.40
sdb 0.00 0.00 20.00 87.00 4.02 21.52 488.75 0.34 3.18 11.40 1.29 0.86 9.20
sdb 0.00 166.00 34.00 4.00 8.01 0.66 467.37 0.22 5.79 6.47 0.00 1.58 6.00
sdb 0.00 0.00 42.00 176.00 8.04 35.61 410.06 0.55 2.51 10.67 0.57 0.70 15.20
sdb 0.00 0.00 22.00 128.00 4.02 32.00 491.84 0.50 3.07 13.09 1.34 1.07 16.00
sdb 0.00 0.00 21.00 68.00 4.02 17.00 483.69 0.51 5.89 20.38 1.41 1.26 11.20
sdb 0.00 0.00 36.00 64.00 8.02 16.00 491.84 0.49 4.92 10.56 1.75 1.20 12.00
sdb 0.00 191.00 26.00 424.00 5.02 18.24 105.87 1.63 3.40 25.23 2.07 1.29 58.00
sdb 0.00 0.00 30.00 9.00 7.01 2.25 486.15 0.32 9.23 11.33 2.22 1.64 6.40
sdb 0.00 0.00 5.00 173.00 0.02 42.75 492.05 1.06 6.04 176.80 1.11 3.53 62.80
sdb 0.00 0.00 37.00 4.00 8.02 1.00 450.37 0.38 9.17 10.16 0.00 2.34 9.60
sdb 0.00 0.00 36.00 97.00 8.02 16.12 371.73 0.60 4.51 11.56 1.90 0.84 11.20
sdb 0.00 163.00 0.00 155.00 0.00 38.40 507.41 0.05 0.34 0.00 0.34 0.03 0.40
sdb 0.00 0.00 55.00 126.00 12.03 31.25 489.72 0.72 3.98 11.27 0.79 1.06 19.20
sdb 0.00 0.00 34.00 0.00 8.01 0.00 482.35 0.39 11.41 11.41 0.00 2.12 7.20
sdb 0.00 0.00 19.00 84.00 4.01 21.00 497.32 0.28 2.72 12.84 0.43 0.58 6.00
sdb 0.00 0.00 54.00 112.00 12.02 28.00 493.78 1.52 9.16 26.96 0.57 1.71 28.40
...
上述内容是iostat -mx /dev/sd[bc] 1观察一段时间的输出,其中grep sdb 的部分,我关心的内容是第11列,即r_await的均值和方差。
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
一直用awk处理,但是总觉的不方便,不能随心所欲,下一次还的写awk,本来想自己写一个tool来计算均值和方差,但是今天搜了一下,发现了宝贝 datamash,这个工具是GNU的,Linux和Mac都有这个工具
datamash 安装
安装的话,可以源码安装,也可以apt安装:
wget http://ftp.gnu.org/gnu/datamash/datamash-1.1.0.tar.gz
tar -xzf datamash-1.1.0.tar.gz
cd datamash-1.1.0
./configure
make
make check
sudo make install
wget http://files.housegordon.org/datamash/bin/datamash_1.0.6-1_amd64.deb
sudo dpkg -i datamash_1.0.6-1_amd64.deb
本来应该是apt-get install datamash,但是好像源里面没有这个包,Mac比较简单,
brew install datamash
datamash使用
还是我们的例子,有了这个工具,我们就可以计算均值和方差了:
root@node4:~/bean# grep sdb n_186.80 | datamash -W mean 11 sstdev 11
20.84330.743196441241
注意啊,一个或者多个空格,如果需要被当成单个空格来对待,就必须加上-W选项,我开始也吃了这个亏,如下:
root@node4:~/bean# grep sdb n_186.80 |awk '{print $11}' |datamash mean 1 sstdev 1
20.84330.743196441241
root@node4:~/bean# grep sdb n_186.80 |datamash mean 11 sstdev 11
datamash: invalid numeric input in line 1 field 11: ''
root@node4:~/bean#
之所以报这个错误,就是因为没有-W选项,导致多个空格并没有当成一个独立的分隔符。
当然了,可以通过 -t选项来指定分隔符。
printf '1,10,,100\n' | datamash -t, sum 4
100
事实上,datamash的能力远不止于此,我们都用过数据库,知道SQL中有group by的功能,datamash 也有类似 的功能:
$ cat scores.txt
Name Subject Score
Bryan Arts 68
Isaiah Arts 80
Gabriel Health-Medicine 100
Tysza Business 92
Zackery Engineering 54
...
注意第二列是科目名称,我们可以计算不同科目的平均分和标准差:
$ datamash --sort --headers --group 2 mean 3 sstdev 3 < scores.txt
GroupBy(Subject) mean(Score) sstdev(Score)
Arts 68.9474 10.4215
Business 87.3636 5.18214
Engineering 66.5385 19.8814
Health-Medicine 90.6154 9.22441
Life-Sciences 55.3333 20.606
Social-Sciences 60.2667 17.2273
出了均值和标准差,还可获取最大最小
sum
sum the of values
min
minimum value
max
maximum value
absmin
minimum of the absolute values
absmax
maximum of the absolute values
更多高阶的用法就参考官方文档吧
linux 计算标准差,shell计算均值和标准差的工具:datamash相关推荐
- R语言使用dplyr包使用group_by函数、summarise函数和mutate函数计算分组下的均值、标准差、样本个数、以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)
R语言使用dplyr包使用group_by函数.summarise函数和mutate函数计算分组下的均值.标准差.样本个数.以及分组均值的95%执行区间对应的下限值和上限值(Calculate 95% ...
- R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差
R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值.标准差(Difference in means and standard deviation of ...
- 监控linux时间不对,shell 计算故障时间 配合web监控
#!/bin/bash #checkfail.log 为SHELL监控网站时间存放的日志文件 https://blog.51cto.com/junhai/2437965 fail_time(){ st ...
- matlab 平均梯度,OpenCV 自学笔记33. 计算图像的均值、标准差和平均梯度
OpenCV 自学笔记33. 计算图像的均值.标准差和平均梯度 均值.标准差和平均梯度是验证图像质量的常用指标.其中: 均值反映了图像的亮度,均值越大说明图像亮度越大,反之越小: 标准差反映了图像像素 ...
- 深度之眼Pytorch打卡(九):Pytorch数据预处理——预处理过程与数据标准化(transforms过程、Normalize原理、常用数据集均值标准差与数据集均值标准差计算)
前言 前段时间因为一些事情没有时间或者心情学习,现在两个多月过去了,事情结束了,心态也调整好了,所以又来接着学习Pytorch.这篇笔记主要是关于数据预处理过程.数据集标准化与数据集均值标准差计算 ...
- Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值
Python使用pandas和scipy计算医疗数据训练集.测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数.连续变量的均值(标准差
- R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数
R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...
- R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)
R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(Summary statistics by group using describe.by() in the ...
- 批量计算图片的均值与标准差
批量计算图片的均值与标准差 最近在工作中需要求出大量图片的均值与方差,然后对于图片在训练前,做标准化处理.在网上搜索了一部分代码,但应用起来并不是很方便,要不就是运算出错,要不就是运行速度非常慢.所以 ...
最新文章
- 《Effective Java》第8章 通用程序设计
- http请求在asp.net中的应用
- leetcode 756. Pyramid Transition Matrix | 756. 金字塔转换矩阵(BFS)
- 面试题之--实现取余
- java try finally connectoin close_Java SocketChannel類代碼示例
- leetcode1476. 子矩形查询
- goroutine 修改全局变量无效问题
- 带孩子们做环球旅行的读后感_孩子少言寡语、不爱说话怎么办?家长们可以这样做...
- python能做什么-学 Python 都用来干嘛的?
- java web scala_Springboot与scala编写第一个web程序
- 变身mac达人,这几招技巧您有必要了解~
- 社会工程学部分攻击经典方法总结
- Unity 性能优化方法总结
- 墨菲定律吉德林法则吉尔伯特定律沃尔森法则福克兰定律
- 基地树洞 | 自动化小系列之番外篇
- 华为畅享7鸿蒙,华为畅享7开箱图赏:做工配置表现不俗
- 七大软件设计原则之一 | 开闭原则
- 计算机图像处理领域重要期刊汇总
- 交错校验法 / interleaving
- 计算机毕业设计(附源码)python信用卡逾期数据处理分析系统