转 快速理解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还有很多其他高级用法,有兴趣的话可以深入学习一下

linux文本分析利器awk的更多相关文章

  1. Linux文本分析命令awk的妙用

    基本用法 awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理 awk命令格式如下 awk [-F field-sep ...

  2. linux 文本分析工具---awk命令(7/1)

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  3. 《Linux 文本处理》- awk 分析 nginx 日志

    废话不多说,简单了解一下 awk - 强大的文本分析工具,也就是分析日志 最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析 1:统计出现次数 - 比如状态码出现次数 - 先直接 ...

  4. Linux文本处理命令 -- awk

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  5. 文本分析工具awk简单示例

    先创建一个文件:vim hi 取第2个字段和第3个字段: awk '{print $2,$3}' hi     注意{}中的,逗号会在输出的时候转变为空格 加入字符说明: 显示整行: 指定字段分隔符: ...

  6. Linux性能分析利器——火焰图的安装使用

    火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的 ...

  7. Linux 文本三剑客之 awk

    Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...

  8. Linux 之 awk文本分析工具

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具.Linux环境中自带. awk调用方法 命令行 awk [-F field-separator] 'commands' input-file( ...

  9. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

随机推荐

  1. nginx负载均衡upstream参数配置

    一定要注意两台机器能够telnet 访问通过  如果不能通过则两台机器都执行一下 iptables -F 机器A: php-fpm配置[www]user = wwwgroup = wwwlisten ...

  2. 猫、路由器、交换机和PC

    转载:http://duanzw102.blog.163.com/blog/static/161838173201392431722650/ 猫是 modem,是有网络供应商,比如电信公司提供的拨号工 ...

  3. [Asp.net本质论]重新认识url

    引言 之前大部分时间,一直在学c#,打算将asp.net本质论好好学习一下,之前虽然已经看了两边了,总感觉看过,没做笔记等于白看了,一点印象也没.打算将书中的代码,自己实现一下,在敲代码时要一直反思, ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  5. Linux驱动mmap内存映射

    mmap在linux哪里? 什么是mmap? 上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED).LCD控制器.磁盘控制器,实际上就是往设备的物理地址读写数据. ...

  6. jTemplates模板学习笔记

    1.jTemplates工作方式   1)setTemplateElement:指定可处理的模板对象 2)processTemplate:对模板化的对象进行数据处理 2.语法解析   1)jTempl ...

  7. Mapreduce报错:java.lang.ClassNotFoundException: Class Mapper not found

    mapreduce找不到mapper类 解决方法: 开始自己用的是mapreduce自己打包的一种方法: job.setJarByClass(StandardJob.class); 但这样一直在报错: ...

  8. [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript

    We want to show an SVG avatar of the patio11bot, so we'll do that in three ways: Using an img tag - ...

  9. Discuz常见小问题2-如何在数据库搜索指定关键字

    点击搜索,然后输入关键字,注意要全选或者部分选择表(一个数据库的表),点击右下角的执行   会提示有多少个匹配,可以在浏览器中直接搜索"1个匹配"来定位到哪个数据表找到了匹配项,然 ...

  10. Win7开机提示group policy client无法登陆怎么办

    1 开机按F8,进入安全模式 2 进入系统之后运行注册表,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Prof ...