前言
awk和sed类似 都是编辑器的一种 但在原理和功用上不太一样 sed是流处理器 线性去执行 awk是根据模式和条件执行编辑命令
一、awk的工作原理
原理
awk是逐行读取文本,默认以空格或者tab来为分隔符进行分割,将分割所得到各个字段保存至内建变量中,并按模式或者条件执行编辑命令。
相比sed,awk倾向于一个将一行分为多个"字段"然后再进行处理,awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。再使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与” "||“表示"或” "!“表示"非”:还可以进行简单的数学运算,如+ - * / % ^ 代表加减乘除 取余 和乘方 取余可以取6位。
命令格式
awk 选项 ‘模式或条件 {操作}’ 文件1 文件2 。。。
awk -f 脚本文件 文件1 文件2 。。。
常用选项
FS: 列分割符。 指定每行文本的字段分隔符,默认为空行或制表符。与"-F"作用相同
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序号)。
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)。
filename:被处理的文件名。
RS 行分割符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’/n’
二、使用方法
1.文件输出
输出文件的整个内容
输出行到行之间的内容 写法有两种
输出两个不连续的行 有别于上面行于行的区间输出
输出奇数行和偶数行 利用取余来判断
根据字符开头匹配输出行 例如根据a开头来匹配 结尾字符也可以匹配
BEGIN用法
begin模式表示,在处理指定的文件之前,需要先执行begin模式中指定的模式中指定的操作,之后awk在去执行操作,再执行end模式中指定的动作,end{}语句模块,一般也会放入打印结果等语句。
例如来统计用i开头的行数
2.根据条件来精确匹配文件中的字符
awk中可以用-F来匹配分隔符来输出行中的字段
例如利用,来匹配每行的第2个字段
也可以匹配多个字段
三元运算符
用于在awk中运算
表示如果1的值小于等于2,就把1值的赋给x 反正就把2的值赋给x
将每行的行号和输出来,每次输出加一
管道和双引号调用shell命令
输出以,分割的行数
输出文件中以1开头的文件 调用wc -l的结果去输出
使用命令去截取内存和cpu的使用情况
统计在线的用户数 应用who命令的结果 和getline
调用hostname命令 来查找当前的用户名