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的处理流程是:

  1. 读入第一行,并将第一行的数据填入$0 $1 $2等变量中
  2. 依据条件类型限制,判断是否进行后面的动作。(上面的没有条件类型)
  3. 做完所有的动作和条件类型  (上面的动作就是"print $1 "\t" $3")
  4. 后面还有行的话,重复以上的动作

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的更多相关文章

  1. [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等

    原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...

  2. 【Linux】linux中文本操作利器grep,awk,sed

    grep命令 grep(global search regular expression)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来.平时搜索文本中内容的时候是非常方 ...

  3. 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等

    作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...

  4. Map工具系列-06-销售营改增历史数据处理工具

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  5. Linux (Ubuntu12.04) 下开发工具安装和使用

    Linux (Ubuntu12.04) 下开发工具安装和使用 这里讲述的是关于在ubuntu12.04下面安装和使用各种IDE 开发环境和初步使用的知识.说一下背景:很多的开发基本都是在linux操作 ...

  6. [转]linux 系统监控、诊断工具之 IO wait

    1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...

  7. linux内置的审计跟踪工具------last和lastb

    last是linux的一个内置工具,可以用来查看最后登录服务器的用户.它对于追踪非常有用. last命令显示的是来自/var/log/wtmp文件创建起,所有登录的用户.这个文件是一个二进制文件,不能 ...

  8. linux入门教程(九) 文本编辑工具vim

    前面多次提到过vim这个东西,它是linux中必不可少的一个工具.没有它很多工作都无法完成.早期的Unix都是使用的vi作为系统默认的编辑器的.你也许会有疑问,vi与vim有什么区别?可以这样简单理解 ...

  9. linux下阅读源代码的工具

    说来真是惭愧呀.一直在用VIM 做开发.却不知道VI 里还有这么好使的工具.以前一直都是用: find -type f -print | xargs grep -i **** 在源代码里查找. 原来L ...

随机推荐

  1. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。

    <javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...

  2. Java中代理对象的使用小结

    在某些情况下,一个客户不想或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到了中介作用,这不仅仅使用代理模式,还可以实现适配器模式.装饰模式等. 代理对象内部含有对真实对象的引用,从而 ...

  3. JS入门(四)

    接之前一篇的函数.写之前的函数的时候讲的比较笼统,在这重新写一下函数的内容. 函数: 之前提过,函数就是代码复用的一种机制或是将代码封装成功能的代码段.函数的声明在这边就不多提了,因为相对来说比较简单 ...

  4. JavaWeb与Asp.net工作原理比较分析

    一.概述 不管是什么语言开发的web应用程序,都是在解决一个问题,那就是用户输入url怎么把对应的页面响应出来,如何通过url映射到响应的类,由于自己做asp.net的时间也不短了,还算是对asp.n ...

  5. 1774: [Usaco2009 Dec]Toll 过路费

    1774: [Usaco2009 Dec]Toll 过路费 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 263  Solved: 154[Submit ...

  6. CLR查找和加载程序集的方式(二) 流程图

    在前一篇文章<CLR查找和加载程序集的方式(一)>中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式. 本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查 ...

  7. WPF 动态生成DataGrid及动态绑定解决方案

    一.场景 有过WPF项目经验的朋友可能都知道,如果一个DataGrid要绑定静态的数据是非常的简单的(所谓静态是指绑定的数据源的类型是静态的),如下图所示,想要显示产品数据,只需绑定到一个产品列表即可 ...

  8. JavaScript的基本规范

    1.不要在同一行声明多个变量: 2.请使用===/!==来比较true/false或者数值: 3.使用对象字面量替代new Array这种形式: 4.Switch语句必须带有default分支: 5. ...

  9. 带金属光泽的模型shader的实现

    最近捣鼓了一下金属光泽的shader的实现,在一些高模展示的时候或者模型的金属部分的表现的时候,我们需要给模型添加一些金属光泽,表现出一个模型某些金属装备上有一定的反光.今天我主要写一种基于贴图实现的 ...

  10. python自动化框架(unnitest+selenium+htmlreport)

    上一篇零零散散的写了一些python unnitest的一些知识,这里讲讲我在实际中使用到的自动化测试框架,算是上篇记录的补充!其实我觉得:什么框架都无所谓,关键是当如果用你的框架发现了bug,能尽量 ...