awk 语法深入浅出(一)

awk 语法深入浅出(一)

在详细阐述awk命令之前,我们首先了解一下awk是如何完成自己的任务的,我们将以一个名为names(仅有三行记录)的文件为例进行说明。

张三    Savage  100
李二    Lee     200
王五    Doe     300

使用下面的awk命令:awk打印字段时,将以下面方式使用print函数

$ awk '{print $1,$3}' names

1 .awk使用一行作为输入(通过文件或者管道),并将这一行赋给内部变量$0 ,默认时每一行也可以称为一个记录,以换行符结束。

张三    100
李二    200
王五    300

awk 指令由模式、操作、或模式与操作的组合组成。

模式是由某种类型的表达式组成的语句。如果某个表达式中没有出现关键字if,但实际计算时却暗含if这个词,那么,这个表达式就是模式。

操作由括在大括号内的一条或多条语句组成,语句之间用分号或换行符隔开,模式则不能被括在大括号中,模式由括在两个正斜杠之间的正则表达式、一个或多个awk 操作符组成的表达式组成。

1 从文件输入

awk的格式如下($是Linux命令的提示符):

$ awk 'pattern' filename
$ awk '{action}' fi1ename
$ awk 'pattern {action}' fi1ename

下面演示一个名为employees的文件。

$ cat employees
Tom    Jones   4424  5/12/66 543354
Mary   Adams   5346  11/4/63 28765
Sally  Chang   1654  7/22/54 650000
Billy  B1ack   1683  9/23/44 336500

awk 打印出所有包含模式Mary的行。

$ awk '/Mary/' employees
Mary Adams 5346 11/4/63 28765

awk打印出文件employees的第一个字段,字段从行的左端开始,以空白符分隔。

$ awk '{print $1}' employees
Tom
Mary
Sally
Billy

awk打印出文件employees的第一个字段,字段从行的左端开始,以空白符分隔。

$ awk '/Sally/{print $1,$2}' employees
Sally Chang

2 从命令输入

可以将一条或多条Linux命令的输出通过管道发给awk处理。格式如下:

$ command | awk 'pattern'
$ command | awk '{action}'
$ command | awk 'pattern {action}'

范例:当文件employees中的某一行含有模式Sally时,awk打印该行的头第一个字段。

$ cat employees | awk '/Sally/{print $1}'
Sally Chang

你可能感兴趣的:(awk)