awk的简要使用
原文地址: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的简要使用的更多相关文章
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- awk简要使用
1 前言 awk是Unix环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便 ...
- awk(2)-模式(pattern)
在上文 awk(1)-简述我们将简要描述了awk的主要使用方向和构成(由一个或多个模式-动作组成),本小节主要讲述awk的各种模式. ps:例子中使用的输入文件(如countries)内容可由awk( ...
- awk 的 pattern(模式)
我们知道, awk程序由一系列 pattern 以及与之对应的 action 组成的 rule 组成,rule之间用";"分号隔开, 一条输入记录与 pattern 匹配则执行与之 ...
- (转)关于 awk 的 pattern(模式)
本文转自chinaunix http://bbs.chinaunix.net/thread-4246512-1-1.html 作者reyleon 我们知道, awk程序由一系列 pattern 以 ...
- 【原】【BG】-一次虚拟化环境实践简要记录
部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...
- 格式化文本数据抽取工具awk
在管理和维护Linux系统过程中,有时可能需要从一个具有一定格式的文本(格式化文本)中抽取数据,这时可以使用awk编辑器来完成这项任务.发明这个工具的作者是Aho.Weinberg和Kernighan ...
- Linux三剑客grep、awk和sed
grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
随机推荐
- 带你认识图数据库性能和场景测试利器LDBC SNB
摘要:本文主要介绍基于交互式查询所用的数据生成器(下文简称Datagen),及LDBC SNB数据如何在华为图引擎服务GES中应用. 本文分享自华为云社区<[图数据库性能和场景测试利器LDBC ...
- 【万字干货】OpenMetric与时序数据库存储模型分析
摘要:解读OpenMetric规范和指标的模型定义基础上,结合当下主流的时序数据库核心存储及处理技术,尝试让用户(架构师.开发者或使用者)结合自身业务场景选择合适的产品,消除技术选型的困惑. 本文分享 ...
- 广告策划师如何做 AB 测试
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近年来,随着消费者的心理需求逐步趋向于精神层面.科技的迭代迅速以及市场环境的复杂性逐步上升,我国的广告行业逐步展开 ...
- 在 Ubuntu 20.04 上安装 Visual Studio Code
Visual Studio Code 是一个由微软开发的强大的开源代码编辑器.它包含内建的调试支持,嵌入的 Git 版本控制,语法高亮,代码自动完成,集成终端,代码重构以及代码片段功能. Visual ...
- Spring 学习笔记(5)AOP
本文介绍 Spring 中 AOP 的原理及使用方式. Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切 ...
- Educational Codeforces Round 108 (Rated for Div. 2) (A思维,Bmath,C前缀和,D枚举)
1519A. Red and Blue Beans 问题简述 给定 \(r\) 个红豆,\(b\) 个蓝豆,差值 \(d\) ,要求我们进行为红蓝豆分组,使得红豆和蓝豆绝对值差值不大于 \(d\) , ...
- Springcloud和Dubbo的区别。Eureka和Ribbon和Hystrix和zuul
netty 是什么? "netty 是一个基于nio的客户.服务器端编程框架,netty提供异步的,事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器.netty是基于ni ...
- 活动回顾|阿里云 Serverless 技术实践营 Serverless +AI 专场
8月25日"阿里云Serverless技术实践营( Serverless + AI 专场)"北京站圆满落幕.活动受众以关注 Serverless +AI 技术的开发者.企业决策人. ...
- Serverless 架构开发手册 — “人人都是 Serverless 架构师”先导篇
摘要:本篇实战将介绍如何以超低成本构建动态的 Web 站点,并且实现灵活扩展,限流等效果,最后再跟大家聊一聊"现代应用"的相关概念. 相信很多同学都有过想要拥有自己的 Web 站点 ...
- vue权限管理
https://www.bilibili.com/video/BV1nq4y1i7BU/?spm_id_from=333.788.recommend_more_video.6&vd_sourc ...