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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。