本章目录
1. awk 命令概述
1.1 awk 常见用法
1.2 awk 工作原理
1.3 awk 命令格式
2. 用法实例
2.1 按行输出文本
2.2 按字段输出文本
2.3 通过管道符号和双引号调用shell命令
2.4 组合使用
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。
sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。
awk 执行结果可以通过 print 的功能将字段数据打印显示。
在使用 awk 命令的过程中,可以使用逻辑操作符:
- “&&”表示“与”;
- “||” 表示“或”;
- “!”表示“非”。
还可以进行简单的数学运算:
- 如 +、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
awk 借用 shell 中类似于位置变量的方法, 用 $1、$2、$3… 顺序地表示行(记录)中的不同字段。
另外 awk 用 $0 表示整个行(记录)。
不同的字段之间是通过指定的字符分隔。
awk 默认的分隔符是空格。
awk 允许在命令行中用 “-F 分隔符” 的形式来指定分隔符。
命令行格式:
- awk 选项 '模式或条件 {编辑指令}' 文件 1 文件 2 …
#过滤并输出文件中符合条件的内容
- awk -f 脚本文件 文件 1 文件 2 …
#从脚本中调用编辑指令,过滤并输出内容
awk 包含几个特殊的内建变量(可直接用)如下所示:
FS | 指定每行文本的字段分隔符,默认为空格或制表位。 |
NF | 当前处理的行的字段个数。 |
NR | 当前处理的行的行号(序数)。 |
$0 | 当前处理的行的整行内容。 |
$n | 当前处理行的第 n 个字段(第 n 列)。 |
FILENAME | 被处理的文件名。 |
RS |
“行“分割符,awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录; |
- 当 getline 左右无重定向符和或时,getline 作用于当前文件,读入当前文件的第一行给其后跟着的变量 var 或 $0,由于 awk 在处理 getline 之前已经读入了一行,所以 getline 得到的返回结果是隔行的;
- 当 getline 左右有重定向符和或时,getline 则作用于定向输入文件,由于该文件是刚打开的,并没有被 AWK 读过,只是 getline 读入,那么 geiline 返回的是该文件的第一行,而不是隔一行。
-