文本分析工具-awk

本文主要介绍了Linux中的awk命令的一些知识以及如何使用awk编程。不同于grep的查找、sed的编辑等命令,awk命令在文本处理和生成报告等地方是经常用到的一个强大命令。

一.AWK简介

简介

awk命令主要用于文本分析。它的处理方式是读入文本,将每行记录以一定的分隔符(默认为空格)分割成不同的域,然后对不同的域进行各种处理与输出。

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

命令格式

awk命令的一个基本格式如下:

1
awk '{pattern   action}' {filenames}

无论awk命令简单还是复杂,基本的格式如上所示。其中引号为必须,引号内代表一个awk程序。大括号非必须,括起来用于根据特定的模式对一系列指令进行分组。pattern是在数据中查找内容,支持正则匹配。action对查找出来的记录执行相应的处理,比如打印和输出等。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk三种调用方式

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

命令行方式

1
awk [-F 'field-separator'] 'commands' input-file(s)

其中的-F指令是可选的,后面跟着指定的域分隔符,比如tab键等(默认是空格)。后面的commands是真正的awk命令。input-file(s)代表输入的一个或多个文件

命令行调用方式是最经常使用的一种方式,也是本文所讲的重点。

二.使用方法

shell脚本方式

把平时所写的shell脚本的首行#!/bin/sh换成#!/bin/awk。把所有的awk命令插入脚本中,通过调用脚本来执行awk命令。

awk '{pattern action}' {filenames}

插入文件调用

把所有的awk命令插入单独的文件中,然后通过以下命令调用awk:

1
awk -f awk-script-file input-file(s)

其中-f指定了要调用的包含awk命令的文件。

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。 

awk应用示例

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。 

打印指定字段

打印当前目录下所有的文件名和文件大小列表,以tab键分割:

1
ls -lh | awk '{print $5"t"$9}'

$0变量是指当前一行记录,$1是指第一个域数据,$2指第二个域数据……以此类推。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。 

print与printf

awk提供了print与printf两种打印输出的函数。

print的参数可以是变量、数值和字符串。参数用逗号分割,字符串必须用双引号引用。

printf与C语言中的printf函数类似,可以用来格式化字符串。

1
awk -F ':' '{printf("filename:s,linenumber:%s,columns:%s,linecontent:%sn",FILENAME,NR,NF,$0)}' /etc/passwd

--------------------------------------分割线

AWK简介及使用实例 http://www.linuxidc.com/Linux/2013-12/93519.htm

AWK 简介和例子 http://www.linuxidc.com/Linux/2012-12/75441.htm

Shell脚本之AWK文本编辑器语法 http://www.linuxidc.com/Linux/2013-11/92787.htm

正则表达式中AWK的学习和使用 http://www.linuxidc.com/Linux/2013-10/91892.htm

文本数据处理之AWK 图解 http://www.linuxidc.com/Linux/2013-09/89589.htm

如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm

本文由太阳集团所有网址16877发布于www.16877.com,转载请注明出处:文本分析工具-awk

您可能还会对下面的文章感兴趣: