前言

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相关推荐

  1. R语言使用dplyr包使用group_by函数、summarise函数和mutate函数计算分组下的均值、标准差、样本个数、以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)

    R语言使用dplyr包使用group_by函数.summarise函数和mutate函数计算分组下的均值.标准差.样本个数.以及分组均值的95%执行区间对应的下限值和上限值(Calculate 95% ...

  2. R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差

    R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值.标准差(Difference in means and standard deviation of ...

  3. 监控linux时间不对,shell 计算故障时间 配合web监控

    #!/bin/bash #checkfail.log 为SHELL监控网站时间存放的日志文件 https://blog.51cto.com/junhai/2437965 fail_time(){ st ...

  4. matlab 平均梯度,OpenCV 自学笔记33. 计算图像的均值、标准差和平均梯度

    OpenCV 自学笔记33. 计算图像的均值.标准差和平均梯度 均值.标准差和平均梯度是验证图像质量的常用指标.其中: 均值反映了图像的亮度,均值越大说明图像亮度越大,反之越小: 标准差反映了图像像素 ...

  5. 深度之眼Pytorch打卡(九):Pytorch数据预处理——预处理过程与数据标准化(transforms过程、Normalize原理、常用数据集均值标准差与数据集均值标准差计算)

    前言   前段时间因为一些事情没有时间或者心情学习,现在两个多月过去了,事情结束了,心态也调整好了,所以又来接着学习Pytorch.这篇笔记主要是关于数据预处理过程.数据集标准化与数据集均值标准差计算 ...

  6. Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值

    Python使用pandas和scipy计算医疗数据训练集.测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数.连续变量的均值(标准差࿰

  7. R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数

    R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...

  8. R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)

    R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(Summary statistics by group using describe.by() in the  ...

  9. 批量计算图片的均值与标准差

    批量计算图片的均值与标准差 最近在工作中需要求出大量图片的均值与方差,然后对于图片在训练前,做标准化处理.在网上搜索了一部分代码,但应用起来并不是很方便,要不就是运算出错,要不就是运行速度非常慢.所以 ...

最新文章

  1. 《Effective Java》第8章 通用程序设计
  2. http请求在asp.net中的应用
  3. leetcode 756. Pyramid Transition Matrix | 756. 金字塔转换矩阵(BFS)
  4. 面试题之--实现取余
  5. java try finally connectoin close_Java SocketChannel類代碼示例
  6. leetcode1476. 子矩形查询
  7. goroutine 修改全局变量无效问题
  8. 带孩子们做环球旅行的读后感_孩子少言寡语、不爱说话怎么办?家长们可以这样做...
  9. python能做什么-学 Python 都用来干嘛的?
  10. java web scala_Springboot与scala编写第一个web程序
  11. 变身mac达人,这几招技巧您有必要了解~
  12. 社会工程学部分攻击经典方法总结
  13. Unity 性能优化方法总结
  14. 墨菲定律吉德林法则吉尔伯特定律沃尔森法则福克兰定律
  15. 基地树洞 | 自动化小系列之番外篇
  16. 华为畅享7鸿蒙,华为畅享7开箱图赏:做工配置表现不俗
  17. 七大软件设计原则之一 | 开闭原则
  18. 计算机图像处理领域重要期刊汇总
  19. 交错校验法 / interleaving
  20. 计算机毕业设计(附源码)python信用卡逾期数据处理分析系统

热门文章

  1. laravel框架excel扩展包maatwebsite-excel升级3.1版本兼容处理
  2. termite:从零开始的go语言学习生活
  3. 打印机一直在打印不停止的问题
  4. java 取整符号_浅析java中的取整(/)和求余(%)
  5. 禁用eslint / ts相关检查
  6. java计算上个工作日方法
  7. 保险怎么买?有哪些销售渠道?各自的优缺点是什么?
  8. Twebbrowser从内存中加载页面
  9. 网络篇 思科设备的登陆方式07
  10. nagios的安装及nrpe的配置