文本三剑客之awk

目录

一、awk概述

1.1、简介

1.2、工作原理

1.3、执行流程

二、awk实战案例

2.1、内建变量

2.2、内置变量

​编辑

2.3、BEGIN、END 运算

2.4、awk高级用法

2.5、awk if 语句

2.6、BEGIN END 流程

2.7、AWK数组

​编辑2.8、awk循环


一、awk概述

1.1、简介

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件。

1.2、工作原理

1.逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
2.awk倾向于将一行分成多个"字段"然后再进行处理。
3.awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
4.使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

awk [options] 'BEGIN{ print "start" } ‘pattern{ commands }’ END{ print "end"}' file

其中:BEGIN END 是 AWK 的关键字部,因此必须大写;这两个部分开始块和结束块是可选的

1.3、执行流程

开始块(BEGIN block)

顾名思义,开始块就是在程序启动的时候执行的代码部分,并且它在整个过程中只执行一次。一般情况下,我们在开始块中初始化一些变量。BEGIN是AWK的关键字,因此它必须是大写的。不过,开始块部

分是可选的,你的程序可以没有开始块部分。

主体块(Body Block)

对于每一个输入的行,都会执行一次主体部分的命令。默认情况下,对于输入的每一行,AWK都会执行命令。注意:在主体块部分,没有关键字存在。

结束块(END Block)

它是在程序结束时执行的代码。END也是AWK的关键字,它也必须大写。与开始块相似,结束块也是可选的。

AWK 工作通过三个步骤:

1、读(Read):从文件、管道或标准输入中读入一行然后把它存放到内存中

2、执行(Execute):对每一行数据,根据 AWK 命令按顺序执行。默认情况是处理每一行数据,也可以指定模式

3、重复(Repeat):一直重复上述两个过程直到文件结束

二、awk实战案例

awk 选项' 模式或条件{操作}' 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ..

格式:awk关键字 选项 命令部分 '{xxxx}' 文件名

AWK 支持两种不同类型的变量:

内建变量(可直接使用),自定义变量awk 内置变量(预定义变量)

2.1、内建变量

FS:指定每行文本的字段分隔符,默认为空格或制表位。

NF:当前处理的行的字段个数。

NR:当前处理的行的行号(序数)。

$0:当前处理的行的整行内容。

$n:当前处理行的第 n 个字段(第 n 列)。

FILENAME:被处理的文件名。

RS:行分隔符。数据记录分隔,默认为\n,即每行为一条记录

例1、简单使用

例2、-F分隔符使用

定义多个分隔符

2.2、内置变量

awk常用内置变量:

$1:代表第一列

$2:代表第二列以此类推

$0:代表整行

NF:一行的列数

NR:行数

例1、打印包含root的整行内容、打印包含root的行的第一列、 打印包含root的行的第一列和第六列

例2、打印每一行的列数 、显示行号

例3、对行、列的简单理解

例4、扩展生产案列:网卡的ip、流量

其他内置变量的用法FS(输入):
FS:输入字段的分隔符 默认是空格
OFS:输出字段的分隔符 默认也是空格
FNR:读取文件的记录数(行号),从1开始,新的文件重新重1开始计数
RS:输入行分隔符 默认为换行符
ORS:输出行分隔符 默认也是为换行符
例5、FS和OFS的对比

FS是是通过分隔符来确定列;OFS

例6、NR和FNR的对比

NR是不看文件多少一直按顺序排下去;FNR是按文件排序,每一个新文件就重新排序

例7、RS和ORS的对比

RS是根据分隔符将内容拆开表示;ORS是将所有内容分割符隔开然后整体表示

2.3、BEGIN、END 运算

BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次
END一般用来做汇总操作,仅在读取完数据记录之后执行一次

例1、简单数字运算

关于数值与字符串的比较
比较符号:== != <= >= < >

例2、

逻辑运算 && ||
&& || 是逻辑运算符,用于组合多个条件并控制程序流程。
&& 要求所有条件都为真时才为真,否则为假。
|| 只要有一个条件为真就为真,全为假时才为假。

例3、合理应用逻辑符

例4、打印 1-100 之间所有能被5 整除并且包含数字5 的整数数字

2.4、awk高级用法

#调用函数getline,读取一行数据的时候并不是得到当前行而是当前行的下一行

2.5、awk if 语句

awk的if语句也分为单分支、双分支和多分支

2.6、BEGIN END 流程

BEGIN 模式表示,在处理指定的文本之前,需要先执行 BEGIN 模式中指定的动作 ; awk 再处理指定的文本,之后再执行END 模式中指定的动作, END{} 语句块中,往往会放入打印结果等语句

2.7、AWK数组

PS1:BEGIN 中的命令只执行一次
PS2: awk 数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号


2.8、awk循环

结合for循环来进行操作

[root@wangming ~]#cat awk3.sh
#!/bin/ bash
x=`awk '/Failed password/{ip[$11]++}END{for(i in ip){print i","ip[i]}}'
/var/log/secure`
6、总结
#190.168.10.22 3
for j in $x
do
ip=`echo $j | awk -F "," '{print $1}'`
num=`echo $j | awk -F "," '{print $2}'`
if [ $num -ge 3 ];then
echo "警告! $ip访问本机失败了$num次,请速速处理!"
fi
done
  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值