awk基础用法

awk是神通广大的工具,不学一下的话,shell脚本写起来真的好艰难。。。

awk有很多不同的版本,这里采用的是gawk(依我看,功能都差不多),它用来检索一些文件,从中找出匹配指定模式的行,然后在这些行上执行指定的动作。

基本格式如下:

gwak options ‘pattern {action}‘ file-list

其中,file-list是gawk的数据来源;options是一些特定的选项;主要部分“模式+动作”必须要放在单引号内,而且动作还要用花括号括起来。主要部分如果太多的话,还可以写进一个文件中(暂且取名program)集合起来,然后用

-f program代替单引号及其内容,当然这是gawk更高级的用法,而且program本身有自己的一些语法规则,以后有时间我会再写一篇文章介绍,这篇就不涉及这一块了,只简单介绍一些基本的用法。

1、基本

一般pattern和action是配对的,然后单引号内可以有很多个这样的对,即在不同的模式上执行不同的动作,写在program的内容实际上主要也是这些。如果缺省pattern则默认选中一个文件所有的行;而缺省action则默认打印匹配的行到屏幕。两个部分可以同时缺省,但是单引号还是必须要打上去,不然就会报错,而且同时缺省gawk什么也不会做。。

对file-list的处理是一个一个进行的,即先在一个file上执行完所有的pattern-action对,再进行下一个文件的处理;而不是用同一个pattern-action对一次性处理完所有文件,再用下一个pattern-action对处理所有文件。

2、pattern

基本形式就是用两个斜杠包围起来的字符串,如/abc/,然后gawk就会检索包含这个字符串的行。模式必须要用斜杠包围起来,裸字符串不起作用的。字符串还可以表现为一个正则表达式,使用各种元字符(如^,表示行首)和逻辑运算符(如 | ,表示或)。pattern还可以用逻辑运算符号(如||,与斜杠内部使用的“或”形式不同)将两个pattern连接起来作为一个使用。如:

gawk ‘/^ab/‘ file    打印开头是ab的行

模式还可以取反,像grep的-v选项那样,方法就是在第一个斜杠前加“!”,如下

gawk ‘!/^ab/‘ file    打印开头不是ab的行

pattern更常见的形式恐怕就是字段和变量了,前面的模式类型只是粗糙的用整行来做匹配,只要这一行里有模式的身影,那这一行就会被选中,然后action也是以行为单位进行的。但是使用字段和变量就可以深入到行内部精细化操作,这其实也是gawk比grep和sed更擅长的地方,它更擅长处理那些结构化的数据,即file里面的数据是按照某种格式“整齐”的排列,就像excel里面的那样,有了“单元格”的雏形。比如在终端输入netstat
-apn,会出现如下画面:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -

tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      -

tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -

tcp        0      0 0.0.0.0:538             0.0.0.0:*               LISTEN      -

每一行数据被“格式化”了,形成了统一的结构,行内数据被分成了不同的字段,字段之间存在明显的分隔符,或者是tab或者是空格或者是其他形式。

在pattern中,是可以引用字段级别的数据的,方式就是$1 $2 $3 $4.....,$n代表一行从从到右第n个字段。于是我们可以匹配到字段级别,而不再用整行来做匹配。匹配的方法就是 $n~/str/,比如:

gawk ‘$2 ~ /man/‘ file    打印第二个字段含有“man”的行

gawk ‘$2 !~ /man/‘ file    打印第二个字段不含有“man”的行(模式取反)

另外还有两个独特的模式,分别是BEGIN和END,这两个模式并不匹配file的任何行,只是占个坑。BEGIN表示在检索file之前要执行与其相关的action,END表示在处理完file的所有行之后要执行与之相关的action。

3、action

action必须要用花括号括起来,这在前面已经强调过。action可以是一条命令,也可以是多条命令,但是命令之间要用分号间隔。

action的内容是丰富多样的,本质上它就是一个小shell脚本,不仅可以是执行各种各样的命令组合,也可以有if等控制结构,还可以定义变量。不过正如前面所说,如果缺省action的话,实际上执行的是print命令,即打印相关内容到标准输出。也可以显式的指定,如:gawk ‘{print}‘ file。

4、选项options

主要就是-f和-F,前者在前面已经说过了,后者的作用是指定每一行的分隔符。默认情况下,每一行的分隔符是tab,但是有些文件里面用的是各种其他的分隔符,比如冒号等,这时候必须要重新指定分隔符,不然gawk不能识别不同的字段。如下:

gawk -F : ‘{print}‘ file   这就会把冒号视分隔符读取file的数据

如果有多个分隔符,则需要用方括号把分隔符括起来,如:

gawk -F [:-] ‘{print}‘ file  把:和-均视为分隔符,注意这不是说它们俩一起作为分隔符,而是每个都是单独的分隔符。

5、内置变量

gawk中可以在花括号内定义变量,除此之外gawk还有内部定义的一些变量,可以直接拿来使用,比如刚才的$1 $2等。下面介绍其他的:

$0    这个变量代表当前一整行内容(也称为一个记录),如 gawk ‘/man/ {print $0}‘ file 会把匹配的一整行内容打印出
来(好吧,这也是打印的默认选项);但是gawk ‘/man/ {print $1}‘ file 却只打印匹配行的第一个字段。

NF   代表每一行有多少个字段

NR
代表当前正在处理的行的编号,每处理完一行,NR自动加1

FILENAME  代表当前处理的文件名(null代表标准输入)

FS   代表读取文件时的字段分隔符(默认为空格或换行)

OFS  代表输出时采用的字段分隔符(默认为空格)

ORS   代表输出时采用记录(行)分隔符(默认为换行)

RS   读取文件时采用的分隔符(默认为换行)

时间: 2024-08-02 18:20:11

awk基础用法的相关文章

性能测试日志分析之awk基础用法

转发自:微信公众号"测试那点事儿 "的文章 我们做性能测试的时候要进行一些日志分析,最简单的可以用awk命令进行分析. awk awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理.而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志. 简单来说,awk就是用一个循环实现的.首先awk读取文本的一行(默认是从第一行开始,当然也可以根据条件选择行),然后根据你给的条件来处理这行的某个字段:处理完成后,再读取下一行,

文本处理工具awk基础用法

sed是以行为单位的文本处理工具,awk则以列为单位. 文件都是结构化的,都是有单词和空白字符组成的. 空白字符包括空格.tab以及连续的空格和tab.每个非空白部分叫做域, $0表示 全部域, $1表示第1个域等等-- 默认以空白字符为分隔符,打印前两列 [email protected]:~/templates$ cat data.txt a.wang Male 30 021-11111111 b.yang Female 25 021-22222222 c.liu Male 33 021-3

日志分析命令awk基础用法

awk awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理.而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志. 简单来说,awk就是用一个循环实现的.首先awk读取文本的一行(默认是从第一行开始,淡然也可以根据条件选择行),然后根据你给的条件来处理这行的某个字段:处理完成后,再读取下一行,然后再根据条件去处理字段,直到处理完成所有的行. awk的标准格式 awk '条件类型1{动作1} 条件类型2{动作2}.....

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

Linux sed 和 awk的用法

sed用法: 原文链接:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] 'command' 输入文本 常用选项:        -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自

awk程序设计语言之-awk基础

awk程序设计语言之-awk基础 1 http://man.linuxde.net/ 2 7 8 常用工具命令之awk命令 9 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(stdin).一个或多个文件,或其他命令的输出.它支持用户自定义函数和动态正则表达式 10 等先进功能,是Linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用,awk有很多内建功能,比如数组.函数等,这是它和c语言的相同之处,灵活性 11 是awk最大

awk基础(马哥视频)

awk基础 1.1 print print的使用格式: print item1,item2, …. 要点: 各项目自己使用逗号隔开,而输出时则以空白字符分隔: 输出的item可以为字符串或者数值,当前记录的字段(如$1).变量或者awk的表达式:数值会先转换为字符串,而后再输出: print的命令后面的item可以省略,此时其功能相当于print $0,因此,如果想输出空白行,则需要使用print “”: 例子: # awk ‘BEGIN {print “line one\nline two\n

19.1 awk基础【第十九章 awk】

第十九章 awk 19.1 awk基础 本博文目录索引 [TOC] 一.初识awk (一)什么是awk? awk,全称:Aho Weinberger Kernighan 是一个报告生成器,用于格式化文本输出 (二)awk能做什么? 1.主要功能:格式化显示文档.或者打印报表 2.将给定的文本内容按照工程师想要的格式输出显示.或者打印成报表格式 3.日常用途:处理各种文档(比如日志信息),从中分析挖掘出工程师关心的必要数据,并且打印成报表 (三)CentOS7系统中的awk 1.gawk 在Cen

sass基础用法

sass基础用法 SASS是什么 传统的CSS是一种单纯的描述性样式文件,然而SASS可以对CSS进行预编译处理. 在SASS源码中可以使用变量.函数.继承等动态语言的特性,并且可以编译成CSS文件. 安装与使用 安装 由于sass是ruby写的,所以想要使用sass就需要安装ruby环境.然后再使用gem安装sass. 输入下面的命令进行安装sass: gem install sass 可以使用sass -v命令查看sass的版本. 使用 新建一个后缀名为.scss源码文件,就可以编辑sass