awk是一个强大的文本分析工具,它在对数据分析并生成报告时,显得尤为强大。 awk逐行读入文件,以空格为默认分隔符对每行进行切片,最后再对切开的部分进行各种分析处理。 awk以文件的一行为处理单位,每接收文件的一行,然后执行相应的命令,来处理文本。
语法:
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
- pattern:匹配模式
- action:在找到匹配内容时所执行的一系列命令。注意:只有匹配了pattern的行才会执行action
-
输出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