AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。 --- 百度百科

简介

AWK 是一个文本处理工具,通常用于处理数据并生成结果报告。

awk的语法格式

  • 第一种格式: awk 'BEGIN{}pattern{commands}END{}' file_name
  • 第二种格式: standard output| awk 'BEGIN{}pattern{commands}END{}'

语法格式说明

语法格式 解释
BEGIN{} 正式处理数据之前执行
pattern 匹配模式
{commands} 处理命令,可能多行
END{} 处理完所有匹配数据后执行

awk中的内置变量

内置变量 含义
$0 整行内容。
$1-$n 当前行的第1-n个字段。
NF Number Field 当前行的字段个数,也就是有多少列,$NF是最后一行。
NR Number Row 当前行的行号,从1开始计数。
FNR File Number Row 多文件处理时,每个文件行号单独计数,都是从0开始。
FS Field Separator 输入字段分隔符,不指定默认以空格或tab键分割。
RS Row Separator 输入行分隔符,默认回车换行。
OFS Output Field Separator 输出字段分隔符,默认为空格。
ORS Output Row Separator 输出行分隔符,默认为回车换行。
FILENAME 当前输入的文件名字。
ARGC 命令行参数个数。
ARGV 命令行参数数组。

commands 处理命令

printf

格式符说明
格式符 含义
%s 打印字符串
%d 打印十进制数
%f 打印一个浮点数
%x 打印十六进制数
%o 打印八进制数
%e 打印数字的科学计数法形式
%c 打印单个字符的ASCII码
修饰符说明
修饰符 含义
- 左对齐
+ 右对齐
# 显示8进制在前面加0,显示16进制在前面加0x。

正则表达式于操作符

awk同sed一样也可以通过模式匹配来对输入的文本进行匹配处理。awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似,而且正则表达式是玩转三剑客的必备工具。

awk支持的正则表达式元字符

元字符 功能 示例 解释
^ 字符串开头 /^creditease/ 匹配所有以 creditease 开头的字符串
$ 字符串的结尾 /creditease$/ 匹配所有以 creditease 结尾的字符串
. 匹配任意单个字符(包括回车符) /c..1/ 匹配字母c,然后两个任意字符,再以1结尾的行, 比如ckkl
* 重复0个或多个字符 /a*cool/ 匹配a 和cool 中间间隔0个或多个字符
+ 重复前一个字符一次或一次以上 /a+b/ 匹配一个或多个a加b的行
? 匹配0个或一个前导字符 /a?b/ 匹配b或者ab的行
[] 匹配指定字符组内的任一个字符 /^[abc]/ 匹配以字母a或b或c开头的行
[^] 匹配不再指定字符组内的任一个字符 /[abc]/ 匹配不以字母a或b或c开头的行
() 子表达式组合 /(cool)+/ 表示一个或多个cool组合,当有一些字符需要组合时,使用括号括起来
| 或者的意思 /(cool)|B/ 匹配cool或者字母B的行