awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具。
简单地讲,awk是一个强大的文本分析工具,把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行处理。对数据进行排序,对其中的数值执行计算以及生成报表等。
除此之外,awk 还是一种编程语言环境,它提供了正则表达式的匹配,流程控制,运算符,表达式,变量以及函数等一系列的程序设计语言所具备的特性。
基本用法
- awk [ 参数 ] pattern {action} 文件名
pattern:表示awk在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一些列命令
常用参数
-F | 指定列的分隔符,默认一行数据的列分隔符是空格 |
-v | 自定义变量 |
-f {file} | 指定读取程序的文件名 |
内置变量
FILE_NAME | 文件名 |
NR | 指定显示行的行号 |
NF | 表示字段数量 |
FNR | 多文件时候,分别计数 |
OFS | 输出格式的列分隔符,缺省是空格 |
RS | 输入记录分隔符,指定输入时的换行符,原换行符($)仍有效 |
FS | 输入文件的列分隔符,缺省是连续的空格和Tab |
ORS | 输出记录分隔符,输出时用指定符号代替换行符 |
执行步骤
- 自动从指定的数据文件中读取行文本。
- 自动更新awk的内置系统变量的值,例如列数变量NF、行数变量NR、行变量$0以及各个列变量$1、$2等。
- 依次执行程序中所有的匹配模式及其操作。
- 当执行完程序中所有的匹配模式及其操作之后,如果数据文件中仍然还有未读取的数据行则返回
- 回到第(1)步,重复执行(1)~(4)的操作。
演示案例
演示文件内容:
测试1 1 11
测试2 2 22
测试3 3 33
测试4 4 44
打印文本
awk '{print $1}' awk.txt
awk '{print $1,$2,$3}' awk.txt
执行awk脚本
在awk程序语句比较多的情况下,用户可以将所有的语句写在一个脚本文件中,然后通过awk命令来解释并执行其中的语句,语法如下:
awk -f command.txt awk.txt
command.txt 内容如下 :{print $1,$2,$3}
自定义变量
awk 'BEGIN{name="test";print name}'