快速理解linux文本分析利器awk

awk是什么

如果工作中需要操作linux比较多,那么awk是非常值得学习的

awk是一个极其强大的文本分析工具,把文件逐行的读入,以指定分隔符将每行切片,切开的部分再进行各种分析处理 可以使用awk创建程序,来读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有很多其他的功能 awk使用示例 通过一些简单的示例来认识一下awk (1)$ ll | awk '{print $9}' 这个命令的结果是只显示文件名列表 工作过程 awk命令接收 ll 结果信息,并逐行处理 对每一行结果记录按空格(空格是默认分隔符)分割,并打印出第9列的信息 语法说明 单引号('')里面的部分是awk要执行的内容,花括号({})中是一个代码块,单引号中可以有多个花括号部分 print是一个输出命令 $9 表示分割结果中的第9列内容,分割结果相当于一个数组,从 0-n,$0 是没分割的整行内容,$n 是分割后的第 n 列内容 (2)awk -F ':' '{print $1"\t"$6}' /etc/passwd 上个命令是通过管道处理命令结果 这个命令是处理文件(/etc/passwd)的内容,显示出用户名、用户目录列表 passwd文件中每行内容是用 ':' 分隔的,要使用 -F 参数来指定分隔符 awk命令的尾部跟上文件名,就表示要处理这个文件 $1"\t"$6 是组织结果信息显示形式,第1列内容 + tab + 第6列内容 (3)awk -F: '/root/{print $0}' /etc/passwd 上两个命令是处理每一行记录,如果想过滤出自己关注的记录,可以使用匹配模式 这个命令就是对每行进行匹配,如果这一行信息中含有 root,才执行后面{}中的命令 双斜杠(/.../)中支持正则表达式,例如匹配以 root 开头的行 awk -F: '/^root/{print $0}' /etc/passwd (4)awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd awk还内置了一些有用的变量,例如这个命令中打印出了

‘文件名’ - FILENAME

‘行号’ - NR

‘列号’ - NF (5)awk -F ':' 'BEGIN {print "header"} {print $1} END {print "foot"}' /etc/passwd 这个命令中多了两个新部分: BEGIN {print "header"} END {print "foot"} BEGIN 是开始处理前的动作,END 是处理后的动作 工作流程 1)先执行BEGING 对应此例中的 BEGIN {print "header"} 2)读取文件,取得第一行进行分割,然后执行动作,对应此例中的 {print $1},直至处理完每一行 3)执行END操作 对应此例中的 END {print "foot"} (6)ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print size/1024/1024,"M"}' 此命令统计文件夹下的文件总大小,以M为单位 此例中新增了一个概念:变量 在起始部分 BEGIN {size=0;} 中,定义了一个变量,名为 size,初始化为 0 在每行对应的处理动作为 {size=size+$5;},对size变量值进行累加 在结束部分 END{print size/1024/1024,"M"} 中,对 size 值转换为M,然后打印出来 (7)ls -l |awk 'BEGIN {size=0;} {if($5!=4096){size=size+$5;}} END{print size/1024/1024,"M"}' 此命令在上个例子的基础上过滤掉了文件夹的大下 过滤是通过条件判断来实现的,文件夹的大小为 4096 awk中的条件语句是从C语言中借鉴来的,支持 if、while、do/while、for、break、continue --- 通过上面的几个例子,已经可以看到awk的概貌,也可以理解了为什么awk这么强大,它有内置变量、可以自定义变量、支持条件判断语句、支持正则表达式…… 可以视为一门语言了

awk还有很多其他高级用法,有兴趣的话可以深入学习一下

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

libevent源码深度剖析(六) 初见事件处理框架

(1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基...

22120
来自专栏测试驿栈

Jmeter(二十五)_Xpath关联

在Jmeter中,除了正则表达式可以用作关联,还有一种方式也可以做关联,那就是 XPath Extractor。它是利用xpath提取出关键信息,传递变量。

16430
来自专栏编程微刊

前端菜鸟之SASS入门笔记

Sass 是成熟、稳定、强大的 CSS 扩展语言。sass是需要编译的,sass不能直接用于页面。它可以提高编程效率(对于使用熟练的人来说)。

10920
来自专栏个人随笔

MySQL数据库设计

  mysql:    dbs  数据库系统    bdms  数据库管理系统    bda   数据库管理员    db    数据库    dba通过d...

337110
来自专栏木头编程 - moTzxx

PHP 生成随机码探索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

16320
来自专栏机器学习从入门到成神

Inverse和Cascade的比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

9410
来自专栏深度学习之tensorflow实战篇

hive排序:distribute by 、sort by 、cluster by 、order by 区别

 3 . 总结分析 1). order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。建议在小的数据集中使用order b...

28940
来自专栏linux驱动个人学习

Linux之内存描述符mm_struct

Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。(所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内...

38550
来自专栏AhDung

【手记】sql报“聚合或其他set操作消除了null值”处理

这个警告在常规场景中没什么影响,但如果是用excel跑SQL,它会因为该警告阻止你的后续操作~事实上excel执行sql限制多多,需要更多的奇技淫巧,之前我就写...

16220
来自专栏Golang语言社区

Go语言的管道Channel用法实例

本文实例讲述了Go语言的管道Channel用法。分享给大家供大家参考。具体分析如下: channel 是有类型的管道,可以用 channel 操作符 <- 对其...

39650

扫码关注云+社区

领取腾讯云代金券