运维三剑客——awk
grep
awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式
awk早期在Unix上实现,我们用的awk是gawk,是GUN awk的意思
awk更是是一门编程语言,支持条件判断、数组、循环等功能
再谈三剑客
grep,擅长单纯的查找或匹配文本内容
awk,更适合编辑、处理匹配到的文本内容
sed,更适合格式化文本内容,对文本进行复杂处理
三个命令称之为Linux的三剑客
awk文本格式化
awk语法
1. awk [option] 'pattern{action}' file ...
2. awk 参数 ‘条件动作’ 文件
awk options 模式 pattern {action} 文件/数据
- Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是 print 和 printf
文本内容,,,,打印第一列
打印第二列
我们执行的命令是 awk '{print $2}',没有使用参数和模式,$2 表示输出文本的 第二列 信息
awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格
$0 表示整行
$NF 表示当前分割后的最后一列
倒数第二列可以写成$(NF-1)
awk内置变量
$n 指定分隔符后,当前记录的第n个字段
$0 完整的输入记录
FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF NF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR NR: 行号,当前处理的文本行的行号。
FNR FNR: 各文件分别计数的行号
打印1,4,5列
打印1,5,3列
自动定义输出内容
awk,必须 外层单引号,内层双引号
内置变量 $1、$2 都不得添加双引号,否则会识别为文本,尽量别加引号
awk参数
参数 -F 指定分割字段符
参数 -v 定义或修改一个awk内部的变量
参数 -f 从脚本文件中读取awk命令
显示五到六行
显示三到六行
打印所有行,并写成行数
显示第一列字段数
显示第一列和倒数第二列
awk取IP
awk分隔符
文本内容,,,,-F 定义分隔符,下面是#为分隔符,打印第二列
打印第一列,并显示字段数 ,然后用“=”连接。
打印第一列,显示字段数,显示行数
awk变量
内置变量
自定义变量
- FS 输入字段分隔符,默认为空白字符
- OFS 输出字段分隔符,默认为空白字符
- RS 输入记录分隔符(输入换行符),指定输入时的换行符
- ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
- NF NF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
- NR NR: 行号,当前处理的文本行的行号。
- FNR FNR: 各文件分别计数的行号
- FILENAME FILENAME: 当前文件名
- ARGC ARGC: 命令行参数的个数
- ARGV ARGV: 数组,保存的是命令行所给定的各参数
处理多个文件显示行号
FNR各文件分别计数
我们一般是以回车为一行,这里是以空格为一行,,,RS指定换行符
ORS 输出记录分隔符,输出时用指定符号代替换行符
FILENAME,显示正在处理的文件
开始前打印一句好“aruill”,然后再次打印所有行
ARGV 数组,保存的是命令行所给定的各参数
自定义变量,并使用
awk格式化输出
print和printf的区别
format的使用
要点:
1、其与print命令的最大不同是,print需要指定format
2、format用于指定后面的每个item的输出格式;
3、printf语句不会自动打印换行符:\n
format格式的指示符都以%开头,后跟一个字符:如下:
%c:显示字符的ASCII码;
%d,%i:十进制整数;
%e,%E:科学计数法显示数值;
%f:显示浮点数;
%g,%G:以科学计数法的格式或浮点数的格式显示数值;
%s:显示字符串;
%u:无符号整数;
%%:显示%自身;
printf修饰符:
-:左对齐,默认右对齐;
+:显示数值符号;printf "%+d"
printf动作默认不会添加换行符
print默认添加换行符
给printf添加格式,,,%s代替字符串,,,\n换行
awk 格式替换符 想要改变多个变量,必须传入多个
awk模式pattern 
awk默认是按行处理文本,如果不指定任何模式(条件),awk默认一行行处理如果指定了模式,只有符合模式的才会被处理
BEGIN 处理文本之前,awk执行了这个动作 END 所有文本处理完毕后,执行力END模式
正则表达式匹配game开头
awk命令执行流程。。限制性BEGIN{},,读取文件,,END{}
awk双斜正则表达式