awk工具简介

Posted 梅诺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk工具简介相关的知识,希望对你有一定的参考价值。

        在上一篇学习sed的基础上,本篇提到的是比sed更高级更好使用的工具(其实awk是一种像shell的但更加复杂的脚本语言)------awk和sed都是以行为单位处理文件的,而awk的优势在于,它不仅能以行进行处理,还能以列为单位处理文件,awk缺省的行分隔符为换行,缺省的列分隔符为连续的空格和Tab,当然这里的行或者列分隔符都可以自行定义。awk中每行的内容就属于一条记录,那当然记录分隔符为换行符。

1.awk命令行的基本形式:awk +选项+'描述' +文件名

                                 或者   awk+选项 -f +描述 +文件名

awk和sed工具一样,它处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接作为命令行参数传入,也可以使用-f参数指定一个脚本文件,编辑命令的格式为:

/pettern/actions    或者   conditionactions,其中pattern是正则表达式,actions是一系列的操作。一般匹配正则表达式的时候,若不满足条件,则立即丢弃,按照行(列)继续查找。

2.前面提到了awk可以按照列来处理文本,那么怎样来取出我们想要的列呢?$0:表示整个当前行   $1、$2:分别表示第一列,第二列,剩下的列以此类推。(如下例子)


3,awk的有些语法使用和C语言在一些程度上还是很具有共同点的,其中使用的printf函数就是有代表意义的一个。awk命令的condition部分可以是两个特殊的BEGIN和END语句,这两个语句各自在前/后被执行一次(用法特别相似于c++中构造函数和析构函数的使用)。(例子如下,统计一个文件中空行数)


4.awk的调用方式

(1)命令行方式:awk -F +命令+文件

文件的每一行,由域分隔符分开的每一项称为一个域,在不指明-F域分隔符的情况下,默认的域分隔符为空格。

(2)前面已经说过awk是一种复杂的脚本语言,那么自然我们可以将所有的命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一般通过键入脚本名称来调用。(例子如下)

文件file:


脚本count.awk


当然除过上面的调用方式,我们还可以在命令行上直接使用命令:chomd  u+x 脚本(修改权限)后执行该命令:awk -f +脚本 即可运行

5.awk调用正则表达式方法:

(1)awk '/pattern/action':这条语句表示可以将$0 中满足正则表达式的进行action处理(例子如下)


(2)awk正则表达式语句(~,~!的作用等同于!~)(例子如下)


从上面的这个例子可以看出:~!表示不匹配正则表达式,直接执行花括号中的打印语句;~表达匹配正则表达式;!~表示不匹配以正则表达式开头的语句。

6.awk的内置变量和一些其他选项

ARGV :命令行参数

ENVIRON:支持系统中环境变量的使用

FILENAME:awk浏览的文件名

FNR:浏览文件的记录数

FS:设置域分隔符,等价于命令行 -F选项

NF:浏览记录的域的个数

NR:已读的记录数

OFS:输出域分隔符

ORS:输出记录空格符

RS:控制记录分隔符


上图中第二个命令执行后打印出来文件名file,但它的个数为什么会那么多呢?那是因为该awk是按照行查找的,所以文本有几行,那么最后打印出来的文件名就有几行。而第三个命令则是我们自行设置了域分隔符和输出分隔符。

以上是关于awk工具简介的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:awk

awk

awk入门

awk命令

awk用法手册

awk命令详解