第七章 Shell文本处理三剑客之awk

本章大纲:

8.3 awk

awk是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及生成报表等等。

在Linux系统下默认awk是gawk,它是awk的GNU版本。可以通过命令查看应用的版本:ls -l /bin/awk

基本的命令语法:awk option 'pattern {action}' file

其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号用于根据特定的模式对一系列指令进行分组。

awk处理的工作方式与数据库类似,支持对记录和字段处理,这也是grep和sed不能实现的。

在awk中,缺省的情况下将文本文件中的一行视为一个记录,逐行放到内存中处理,而将一行中的某一部分作为记录中的一个字段。用1,2,3...数字的方式顺序的表示行(记录)中的不同字段。用$后跟数字,引用对应的字段,以逗号分隔,0表示整个行。

8.3.1 选项

选项

描述

-f program-file

从文件中读取awk程序源文件

-F fs

指定fs为输入字段分隔符

-v var=value

变量赋值

--posix

兼容POSIX正则表达式

--dump-variables=[file]

把awk命令时的全局变量写入文件,

默认文件是awkvars.out

--profile=[file]

格式化awk语句到文件,默认是awkprof.out

8.3.2 模式

常用模式有:

Pattern

Description

BEGIN{ }

给程序赋予初始状态,先执行的工作

END{ }

程序结束之后执行的一些扫尾工作

/regular  expression/

为每个输入记录匹配正则表达式

pattern &&  pattern

逻辑and,满足两个模式

pattern || pattern

逻辑or,满足其中一个模式

! pattern

逻辑not,不满足模式

pattern1, pattern2

范围模式,匹配所有模式1的记录,直到匹配到模式2

而动作呢,就是下面所讲的print、流程控制、I/O语句等。

示例:

1)从文件读取awk程序处理文件

1
2
3
4
5
6
# vi test.awk
{print$2}
# tail -n3 /etc/services |awk -f test.awk
48049 /tcp
48128 /tcp
49000 /tcp

2)指定分隔符,打印指定字段 

1
2
3
4

你可能感兴趣的:(awk,shell,操作系统)