原文地址:https://www.lujun9972.win/blog/2020/08/23/在命令行进行简单的统计分析/index.html

使用awk获取最小值、最大值、中位数和平均值

使用awk先把数据存入一个数组中,然后对数组进行排序后就可以自己写代码找出最小值、最大值、中位数和平均值了:

#! /usr/bin/awk -f
{
sum += $1 # 假设数据放在第一列
nums[NR] = $1 # 将数据记录到数组中
}
END {
if (NR == 0) exit #防止出现处于0的情况To avoid division by zero
<span class="org-preprocessor">asort</span>(nums)  <span class="org-comment-delimiter">#  </span><span class="org-comment">先对数据进行排序,用于记录中位数</span>

<span class="org-comment-delimiter"># </span><span class="org-comment">计算中位数</span>
median = (<span class="org-variable-name">NR</span> % 2 == 0) ? ( nums[<span class="org-variable-name">NR</span> / 2] + nums[<span class="org-variable-name">NR</span> / 2 + 1] ) / 2 : nums[<span class="org-preprocessor">int</span>(<span class="org-variable-name">NR</span> / 2) + 1] <span class="org-comment-delimiter"># </span><span class="org-comment">计算平均</span>
mean = sum/<span class="org-variable-name">NR</span> <span class="org-preprocessor">printf</span> <span class="org-string">"min = %s, max = %s, median = %s, mean = %s\n"</span>, nums[1], nums[<span class="org-variable-name">NR</span>], median, mean

}

我们可以实验一下:

seq -10 3 30|~/bin/calculate.awk

min = -10, max = 29, median = 9.5, mean = 9.5

使用datamash进行统计分析

使用awk虽然可以进行统计分析,但是需要自己去实现大量的细节,很麻烦。 datamash 则是一个直接提供了基本统计能力的命令行程序。

datamash的使用非常简单,其调用规则为 datamash 选项 统计操作1 数据列1 [统计操作2 数据列2].... 它会对 数据列N 所表示的数据执行 统计操作N. 其中 数据列 一般是一个表示第几列的数字,但是当数据文件中的第一行是标题时,可以通过 -H 选项来指明数据文件中包含标题行,此时 数据列 可以是标题名来代替。

常见的选项说明

 分组

<dd>
datamash支持对数据进行分组统计,通过使用
<code>--group=数据列1[,数据列2,数据列3]</code> 可以指明根据哪几个域进行分组
</dd> 排序 <dd>
datamash需要输入的数据是预先经过排序的,若数据未经过排序则需要通过
<code>--sort</code> 选项预先进行排序
</dd> 忽略大小写差异 <dd>
通过
<code>--ignore-case</code> 选项可以让 datamash 在分组时忽略大小写的差异
</dd> 设置分隔符 <dd>
默认情况下datamash使用
<code>TAB</code> 作为列的分隔符,通过
<code>--field-separator=x</code> 可以设置
<code>x</code> 作为列分隔符,也可以通过
<code>--whitespace</code> 设置使用一个或多个空格或者tab作为分隔符。
</dd> 转置 <dd>
通过
<code>transpose</code> 选项可以交换行列式
</dd> 反转 <dd>
通过
<code>reverse</code> 选项可以反转字段的顺序
</dd> 跳过空值 <dd>
<code>--narm</code> 跳过空域
</dd>

常见的统计操作

 count

<dd>
计算总数据量
</dd> rand <dd>
随机返回一个值
</dd> sum <dd>
汇总
</dd> min <dd>
取最小值
</dd> max <dd>
取最大值
</dd> absmin <dd>
取绝对值最小的那个值
</dd> absmax <dd>
取绝对值最大的那个值
</dd> range <dd>
值域范围,即max - min
</dd> mean <dd>
取均值
</dd> median <dd>
取中位数
</dd> q1 <dd>
取第一四分位
</dd> q3 <dd>
取第三四分位
</dd> iqr <dd>
取四分位距
</dd> mode <dd>
取众数
</dd> antimode <dd>
取最少出现的数
</dd> pstdev <dd>
总体标准差
</dd> sstdev <dd>
样本标准差
</dd> pvar <dd>
总体方差
</dd> svar <dd>
样本方差
</dd> pskew <dd>
总体偏度
</dd> sskew <dd>
样本偏度
</dd> pkurt <dd>
总体峰度
</dd> skurt <dd>
样本峰度
</dd> pcov <dd>
总体协方差,需要两组数据,用
<code>列1:列2</code> 来表示
</dd> scov <dd>
样本协方差,需要两组数据,用
<code>列1:列2</code> 来表示
</dd> ppearson <dd>
总体皮尔逊相关系数,需要两组数据,用
<code>列1:列2</code> 来表示
</dd> spearson <dd>
样本皮尔逊相关系数,需要两组数据,用
<code>列1:列2</code> 来表示
</dd>

例子

比如上面的awk脚本可以用一行datamash命令代替:

seq -10 3 30|datamash min 1 max 1 median 1 mean 1

-10     29      9.5     9.5

</article>

awk的简要使用的更多相关文章

  1. 测试技能积木-AWK的简要用法

    做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...

  2. awk简要使用

    1          前言 awk是Unix环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便 ...

  3. awk(2)-模式(pattern)

    在上文 awk(1)-简述我们将简要描述了awk的主要使用方向和构成(由一个或多个模式-动作组成),本小节主要讲述awk的各种模式. ps:例子中使用的输入文件(如countries)内容可由awk( ...

  4. awk 的 pattern(模式)

    我们知道, awk程序由一系列 pattern 以及与之对应的 action 组成的 rule 组成,rule之间用";"分号隔开, 一条输入记录与 pattern 匹配则执行与之 ...

  5. (转)关于 awk 的 pattern(模式)

    本文转自chinaunix http://bbs.chinaunix.net/thread-4246512-1-1.html   作者reyleon 我们知道, awk程序由一系列 pattern 以 ...

  6. 【原】【BG】-一次虚拟化环境实践简要记录

    部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...

  7. 格式化文本数据抽取工具awk

    在管理和维护Linux系统过程中,有时可能需要从一个具有一定格式的文本(格式化文本)中抽取数据,这时可以使用awk编辑器来完成这项任务.发明这个工具的作者是Aho.Weinberg和Kernighan ...

  8. Linux三剑客grep、awk和sed

    grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...

  9. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  10. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

随机推荐

  1. 云小课|使用SpringBoot快速构建FunctionGraph HTTP函数

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:本篇云小课主要指导 ...

  2. 📝 App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法

    ​ 引言 在iOS应用程序开发过程中,进行App备案并获取公钥及证书SHA-1指纹是至关重要的步骤.本文将介绍如何通过appuploader工具获取iOS云管理式证书 Distribution Man ...

  3. 火山引擎 ByteHouse:如何提升 18000 节点的 ClickHouse 可用性?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 ClickHouse 是业内被广泛使用的 OLAP 引擎.当集群规模过大时,ClickHouse 则面临使用局限性 ...

  4. 火山引擎 DataTester 上线全新 MAB 智能调优实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近期 DataTester 上线了 MAB 智能调优实验功能,希望通过智能化.自动化的 A/B 实验形式,帮助业务 ...

  5. HTML 首页 欢迎页

    HTML 首页 欢迎页,将下面代码复制出来,贴到HTML中,直接运行 <!DOCTYPE html> <html lang="en"> <head&g ...

  6. 在DataGrid中实现Button Command绑定

    在DataGrid中实现Button Command绑定 Command="{Binding editCommand}" 会默认查找UserList中对象的属性,而你的UserLi ...

  7. 6行代码!用Python将PDF转为word

    pdf转word应该算是一个很常见的需求了 网上有些免费的转换工具,一方面不安全,有文件泄露风险,另一方面有免费转换的次数限制. 今天向大家分享一个很好用的工具:pdf2docx 安装 $ pip i ...

  8. Python pickle 二进制序列化和反序列化 - 数据持久化

    模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化. "pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 & ...

  9. 面试官:请聊一聊String、StringBuilder、StringBuffer三者的区别

    面试官:"小伙子,在日常的写代码过程中,使用过String,StringBuilder和StringBuffer没?" 我:"用过的呀!" 面试官:" ...

  10. [Docker] Mac M2 – no such file or directory: /var/lib/docker/volumes ,找不到var/lib/docker/volumes (已解決)

    Mac M2 Pro Docker 24.0.6 $ docker volume inspect 14dfdb65fb7075d91b2004c979a3591df54bcc1303ff3ca96a3 ...