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的行 |