原文地址: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. 人人都在聊的云原生数据库Serverless到底是什么?

    摘要:华为云数据库营销专家Tony Chen和华为云数据库高级产品经理佳恩开展了一场关于云原生数据库与Serverless结合的直播对话. 云计算的迅猛发展推动了数据库的变革,云原生数据库成为当前数据 ...

  2. 可以一学的代码优化小技巧:减少if-else冗余

    摘要:if-else 语句对于程序员来说,是非常非常熟悉的一个判断语句,我们在日常开发和学习中都经常看见它. 本文分享自华为云社区<JavaScript代码之美-代码优化,减少if-else冗余 ...

  3. 有了这个数据强一致“利器”,DBA们轻松修复数据对加班“say no”

    摘要:不想加班修复数据?强一致的华为云数据库GaussDB(for Cassandra)来了-- 本文分享自华为云社区<HDC.Cloud2021|华为云GaussDB让开发者们不再加班修复数据 ...

  4. MySQL事务处理特性的实现原理

    摘要:事务这个词来自于英语中的transactional这个词的翻译,这个词的含义更多的是指 "交易".在数据库系统或者软件系统中我们通常 称 transactional 为事务 ...

  5. 云小课 | 华为云KYON之VPC终端节点

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

  6. 【白话科普】聊聊 DNS 的那些小知识

    你是否在上网时,遇到过这样的情况:QQ 能正常发送消息,但是网页却打不开,查看网络连接又正常显示.面对这种情况很多小伙伴都感到有些无措.那究竟要怎么处理,这究竟是怎么回事呢? 上网查询得知,一般情况下 ...

  7. ThrottleStop设置

    主界面 选项界面 在主界面点击"Options"按钮进入选项界面 给CPU降压 在主界面点击"FIVR"按钮进入如下界面 如上图所示,我自己的电脑,降压49.8 ...

  8. ldap sssd授权linux登录

    业务系统越来越多,服务器也越来越多,本文主要是给企业用户减少账号密码管理难度的. 目的:使用ldap统一管理账号密码,实现单点登录linux. 一点废话,网上找了很多文章,看得云里雾里,搞了几天算是搞 ...

  9. 深度揭秘阿里云 Serverless Kubernetes

    作者 | 陈晓宇(阿里云技术专家) 策划 | 褚杏娟 伴随着云原生的发展,从早先的单机版 Docker 到 Kubernetes 的编排领域的一统江湖,再到云上托管 Kubernetes,技术风雨变化 ...

  10. vue学习笔记 十、状态管理基础结构

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...