运维三剑客——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双斜正则表达式  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值