awk是一个强大的文本分析工具,它在对数据分析并生成报告时,显得尤为强大。
awk逐行读入文件,以空格为默认分隔符对每行进行切片,最后再对切开的部分进行各种分析处理。
awk以文件的一行为处理单位,每接收文件的一行,然后执行相应的命令,来处理文本。
语法:
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
- pattern:匹配模式
- action:在找到匹配内容时所执行的一系列命令。注意:只有匹配了pattern的行才会执行action
| 选项参数 | 功能 |
|---|---|
| -F | 输入文件分隔符 |
| -v | 赋值一个用户定义变量 |
-
输出emp.txt的第1和第2列。
-
输出dept.txt中的数据,并添加表头和表尾,中间为空格分隔
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。BEGIN和END都需要大写 -
搜索emp.txt文件中包含AR关键字的所有行,并输出该行的第1列和第2列,中间以’,'号分割。
其中: -
.匹配除"\r\n"之外的任何单个字符 -
*零次或多次匹配前面的字符或子表达式
示例:取出emp.txt中的deptno并排序.
awk的内置变量
| 内置变量 | 说明 |
|---|---|
| ARGC | 命令行参数个数 |
| ARGV | 命令行参数排列 |
| ENVIRON | 支持队列中系统环境变量的使用 |
| FILENAME | 文件名 |
| FNR | 浏览文件的记录数 |
| FS | 设置输入域分隔符,等价于命令行 -F选项 |
| NR | 已读的记录数,即当前行数 |
| NF | 切割后,列的个数 |
| OFS | 输出域分隔符 |
| ORS | 输出记录分隔符 |
| RS | 控制记录分隔符 |
示例:统计dept.txt文件名,每行的行号,每行的列数
使用printf替代print,可以让代码更加简洁,易读
备注:
awk中同时提供了print和printf两种打印输出的函数,其中:
- print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。
- printf后面的小括号可以省略
- printf函数,可以使用格式化字符串
- 输出复杂时,printf更加好用,代码更易懂
示例:切割IP
示例:求所有部门编号的和
示例:对文件中的数据排序并求和
数据:
12
8
14
4
6
8
9
10
11
