介绍
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。以空格做为分隔符,多个空格他会自动压缩成一个。
AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理.
1、按照命令找指定的行
2、找到的行 打印,操作 awk默认的操作就是打印
可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。
书写方式:awk '<pattern> <action>' <input-file>
操作符 怎么干 处理对象
工作原理
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。
awk 执行结果可以通过 print 的功能将字段数据打印显示
awk的基本格式及其内置变量:
awk 选项 '模式或条件 {操作}' 文件1 文件2...
二、awk工作过程
第一步:执行BEGIN{action;… }语句块中的语句。
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
三、END与 pattern语句
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,也是可选的。
如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
四、 命令符号
-F
-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符。
-v
-v(小v) var=value 变量赋值
注意一定是单引号:'模式或条件 {操作}'
{ }外指定条件,{ }内指定操作。
用逗号指定连续的行,用 || 指定不连续的行。&&表示”且“。
awk {print $1,$2,$3}
内置变量,不能用双引号括起来,不然系统会把它当成字符串
内置变量
- $0: 当前处理的行的整行内容 打印所有
- $n: 当前处理行的第n个字段(第n列)
- NR: 当前处理的行的行号(序数)
- NF: 当前处理的行的字段个数。$NF代表最后一个字段
- FS: 列分割符。指定每行文本的字段分隔符,输入内容的分隔符,默认为空格或制表位。与"-F"作用相同 用-F可以不加单引号 -F:,用FS必须用="" 。
- OFS:输出内容的列分隔符
- FILENAME:被处理的文件名
- RS: 行分隔符。awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是"\n"