【one day one linux】好用的数据处理工具awk
awk:好用的数据处理工具
取自《鸟哥私房菜》awk一节
应用:awk是以一行为一次的处理单位,将一行分成数个“字段”进行处理。
#awk的命令格式
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
awk后面接两个单引号并加上大括号{}来设置想要对数据的处理动作。awk处理后面接的文件名字.
awk主要处理每一行的字段内的数据,而默认的字段的分隔符为空格键或者[tab]键。
如下的例子,处理last取出的登录数据:
last -n
# last -n | awk '{print $1 "\t" $3}'
上面是默认使用空格键作为分隔符。
有上面可以看出awk把每个字段分配一个变量名称,$1表示第一个字段,$2表示第二个字段,而$0表示一整行。
awk的处理流程是:
- 读入第一行,并将第一行的数据填入$0 $1 $2等变量中
- 依据条件类型限制,判断是否进行后面的动作。(上面的没有条件类型)
- 做完所有的动作和条件类型 (上面的动作就是"print $1 "\t" $3")
- 后面还有行的话,重复以上的动作
awk的内置变量,可以查看到底有几行,几列
变量名称 | 代表意义 |
NF | 每一行($0)拥有的字段总数 |
NR | 目前awk所处理的是“第几行”数据 |
FS | 目前的分割字符,默认是空格键 |
上面的last -n 5的例子来做说明:
- 列出每一行的账号(就是$1)
- 列出目前处理的行数(就是awk内的NR变量)
- 并且说明,该行有多少字段(就是awk内的NF变量)
# last -n | awk '{print $1 "\t lines: "NR "\t columes: "NF}'
有上面的代码可以看出:
- 当awk后续所有的动作都是用 ' 单引号括起来的
- print打印时,如果属于非变量的文字需要使用 " 双引号括起来
awk的逻辑运算和条件
awk需要使用判断条件,所以就有逻辑运算符,和C语言差不多: "<" ">" ">=" "<=" "==" "!="
下面使用cat 查看/etc/passwd文件的字符串,他的第一个字段是账号,第三个字段是UID,使用awk筛选出UID小于10 的数据
# cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
可以看到,这里的第一行是没有被处理的,这里是因为我们读入第一行的时候,那些变量$1 $2 ...默认还是以空格分割的,所以我们虽然定义了FS=":"了,但是切仅能作用在第二行后才开始生效。
解决办法:利用BEGIN关键字,like this
# cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}'
awk计算处理数据
# cat pay.txt | \
awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}
NR>={total = $+$+$ printf "%10d %10d %10d %10d %10.2f",$,$,$,$,total}'
这里这条命令一直运行出错,待稍后查看
【one day one linux】好用的数据处理工具awk的更多相关文章
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- 【Linux】linux中文本操作利器grep,awk,sed
grep命令 grep(global search regular expression)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来.平时搜索文本中内容的时候是非常方 ...
- 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...
- Map工具系列-06-销售营改增历史数据处理工具
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Linux (Ubuntu12.04) 下开发工具安装和使用
Linux (Ubuntu12.04) 下开发工具安装和使用 这里讲述的是关于在ubuntu12.04下面安装和使用各种IDE 开发环境和初步使用的知识.说一下背景:很多的开发基本都是在linux操作 ...
- [转]linux 系统监控、诊断工具之 IO wait
1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...
- linux内置的审计跟踪工具------last和lastb
last是linux的一个内置工具,可以用来查看最后登录服务器的用户.它对于追踪非常有用. last命令显示的是来自/var/log/wtmp文件创建起,所有登录的用户.这个文件是一个二进制文件,不能 ...
- linux入门教程(九) 文本编辑工具vim
前面多次提到过vim这个东西,它是linux中必不可少的一个工具.没有它很多工作都无法完成.早期的Unix都是使用的vi作为系统默认的编辑器的.你也许会有疑问,vi与vim有什么区别?可以这样简单理解 ...
- linux下阅读源代码的工具
说来真是惭愧呀.一直在用VIM 做开发.却不知道VI 里还有这么好使的工具.以前一直都是用: find -type f -print | xargs grep -i **** 在源代码里查找. 原来L ...
随机推荐
- Laravel路由
Laravel安装,这里使用一键安装包. 使用PHP内置的Web服务器,在PHP文件夹下运行命令行 php -S 0.0.0.0:1024 一.设置路由 路由文件在app\HTTP\routes.ph ...
- Android HelloChart Demo
这几天,要做一个图标的统计,自己去网上查了下,现在用的比较多的有三种,AChartEngine 是Google的一个开源图表库 这种我最开始就去导demo去了解他,不过里面是是英文,不好研究.我就放弃 ...
- web计时机制——performance对象
前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...
- ACM 树形数组
树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元 ...
- KoaHub.JS基于Node.js开发的mysql的node.js驱动程序代码
mysql A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 10 ...
- ionic的安装
一.学习一样新的框架的步骤: 1.先找到人家的网站, 一个个点过来看看 2.我们前端的框架,分css与js 3.先学css 再学js 4.要学会复制黏贴代码, 实际演练代码的效果 二.ionic环境安 ...
- 3301: [USACO2011 Feb] Cow Line
3301: [USACO2011 Feb] Cow Line Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 82 Solved: 49[Submit ...
- webpack 安装流程
我最近想看看wabpack,然后就面临着安装的问题,说实话,我一点也不懂cmd,怎么还需要用cmd安装呢.其实看教程上说可以在npm上安装,但是我打开npm总是出现闪退,所以我就选择了cmd 安装的过 ...
- 爬取软考试题系列之ip自动代理
马上5月份有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.com网上的软考试题. 以上为背景. 很久没有更新博客园的博客了,所以之前的代码没有及时的贴出来,咱们 ...
- sublime 快速安装多个插件的两种方法[Advanced Install Package]与[Package Control.sublime-settings]
环境 sublime 3,目前官网下载的sublime3 已经支持自动安装 Package Control . 第一种: ctrl+shift+p 调出命令面板以后 以前都是使用 Package Co ...