Linux awk命令

来源:互联网 发布:3dsmax2014软件许可证 编辑:程序博客网 时间:2024/05/01 17:17


1简介

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

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

 

2格式

awk'{pattern + action}' {filenames}

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

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

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

 

3调用awk

3种方式调用awk

1.命令行方式

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

其中,commands是真正awk命令,[-F域分隔符]是可选的。 input-file(s)是待处理的文件。

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

 

2.shell脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh

可以换成:#!/bin/awk

 

3.将所有的awk命令插入一个单独文件,然后调用:

awk -fawk-script-file input-file(s)

其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

4 awk处理流程

1】读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;

2】依据 "条件类型"的限制,判断是否需要进行后面的 "动作"

3】做完所有的动作与条件类型;

4】若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。

经过这样的步骤,你会晓得, awk是『以行为一次处理的单位』,而『以栏位为最小的处理单位』。好了,那么 awk怎么知道我到底这个数据有几行?有几栏呢?这就需要 awk的内建变量的帮忙啦~

5语法

5.1内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC              命令行参数个数

ARGV              命令行参数排列

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

FILENAME          awk浏览的文件名

FNR               浏览文件的记录数

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

NF                浏览记录的域的个数

NR                已读的记录数,即目前 awk所处理的是『第几行』数据

OFS               输出域分隔符

ORS               输出记录分隔符

RS                控制记录分隔符

5.2数组

awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

 

 

5.3条件语句

awk中的条件语句是从C语言中借鉴过来的,可控制程序的流程

 

5.4循环语句

awk有三种循环:while循环;for循环;specialfor循环

5.5函数

内建函数

自定义函数

 

6示例

$cat/etc/passwd |awk -F':' '{print $1"\t"$7}'

$awk-F:'/root/' /etc/passwd

$awk-F:'/root/{print $7}' /etc/passwd         



转自:

《linux awk命令详解》

《linux awk完全手册》

0 0
原创粉丝点击