Bootstrap

Linux文本处理之awk命令精讲 作者(Wizards-dxy)

第一章awk基础入门

作者: Wizards-dxy(QQ:343943851)

1. awk简介

(1)模式扫描和处理

awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel)处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,==awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。==本章主要讲解awk命令的运用。

(2)一种名字怪异的语言

2. 学完awk你可以掌握

(1) 记录与字段
(2)模式匹配:模式与动作
(3)基本的awk执行过程
(4)awk常用内置变量(预定义变量)
(5)awk数组(工作常用)
(6)awk语法:循环,条件
(7)awk常用函数
(8)向awk传递参数
(9)awk引用shell变量
(10)awk小程序及调试思路

3. awk的格式


模式:就是条件,根据条件筛选数据。即过滤条件,只用来筛选数据。
动作:干什么。根据模式筛选出来的数据用来做什么。

4.模式动作

示例1 基本的模式和动作

原始文件内容
在这里插入图片描述
执行命令后屏幕输出
在这里插入图片描述
命令分析
-F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。
NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。
{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。

awk -F " " 参数解析
指定双引号内的符号作为文件内容的分割符(分列符),进行字段的切割。
在这里插入图片描述
此处就相当于 awk -F “:” 以:号在作为分列符对字段进行切割。共有七列。

示例2 只有模式

在这里插入图片描述
命令分析
NR>=2&&NR<=6这部分是条件,表示取第2行到第6行。
但是这里没有动作,这里大家需要了解如果只有条件(模式)没有动作,awk默认输出整行

示例3 只有动作

在这里插入图片描述
命令分析
-F指定分隔符为冒号
这里没有条件,表示对每一行都处理

示例4 多个模式和动作
在这里插入图片描述
命令分析
-F指定分隔符为冒号
这里有多个条件与动作的组合
NR= =2表示条件,行号(NR)等于2的条件满足的时候,执行{print NR,$1}动作,输出行号与第一列。
NR= =4表示条件,行号(NR)等于2的条件满足的时候,执行{print NR,$3}动作,输出行号与第四列。

$在awk动作中解析
$1表示取第一列
$2表示取第二列
以此类推
$0表示输出全部、
$NF表示取最后一列

5.awk注意事项

1.Pattern和{Action}需要用单引号引起来,防止shell作解释。
2.Pattern是可选的。如果不指定,awk将处理输入文件中的所有记录。如果指定一个模式,awk则只处理匹配指定的模式的记录。
3.{Action}为awk命令,可以是但个命令,也可以多个命令。整个Action(包括里面的所有命令)都必须放在{ 和 }之间。
4.Action必须被{ }包裹,没有被{ }包裹的就是Patern
5.file要处理的目标文件

6.awk命令执行过程

1)awk读入第一行内容
2)判断是否符合模式中的条件NR>=2
a,如果匹配则执行对应的动作{print $0}
b,如果不匹配条件,继续读取下一行
3)继续读取下一行
4)重复过程1-3,直到读取到最后一行(EOF:end of file)

7.NR行号记录符

NR行号记录符
读一行数据之前记录一个数字,换行之后再记录一个数字,以此类推。

8.RS:读入换行符 默认的是\n

当我们指定了读入换行符之后,awk读取过程中遇到文件中自带的\n,还是会换行,但是NR不会记录。NR只会记录指定读入换行符的行数。\n在计算机语言中就是回车换行符,不论什么条件下计算机都会执行。

在这里插入图片描述

9.ORS:输出换行符

原始文件中每次换行都会有\n,只不过我们看不见,但是计算机可以看见。我们在BEGIN模块中设定了读入换行符,那么我们在此基础上设定输出换行符,屏幕输出时输出换行符就会替代前面的读入换行符。但是我们会发现文件依然像之前一样换行,因为在原始文件中,每行的末尾都有\n。因为我们看不见所以我们没办法删除这个字符串,因此,在计算机读取文件时遇见\n还是会换行但NR不作记录。
在这里插入图片描述

10.实操:利用awk抓取ip地址

eth0的网卡信息
在这里插入图片描述
利用正则表达式格式抓取ip地址(贪婪模式)
在这里插入图片描述
因为-F是对管道符传递过来的所有的内容进行文件切割,那么根据分列符号“[ :]+”
来看启用了空格和冒号的贪婪模式。==所谓贪婪模式简单的说就是,你的就是我的,我的还是我的,只要符合条件有多少要多少。==那么第一行第一列就是eth0,第二行第一列为空值,显然第二行有很多个空值(空格),所以前面会被分割成很多列,但是因为有贪婪模式,所以第二行inet前所有空格都被识别成一个。所以取第四列即为ip地址。

无贪婪模式利用正则表达式格式抓取ip地址
在这里插入图片描述
此时分隔符号为[ :]说明无贪婪模式,第一行第一列就是eth0,第二行第一列为空值,显然第二行有很多个空值(空格),所以前面会被分割成很多列。通过试验我们得知inet是第十一列,由此往后推即可得知ip地址位于第几列。

11.企业应用实战

题目:按单词出现频率降序排序(计算文件中每个单词的重复数量)
在这里插入图片描述

答案:
第一步
取出文件内所有单词,一切符号除外
在这里插入图片描述
第二步
进行降序排序
在这里插入图片描述
命令解析
| xargs 将文件输出内容变更为一行
- n1 设置输出内容每行只有一个元素
sort 按照26个英文字母顺序进行排序
uniq -c 相同单词去重抵消(不区分大小写)
-c 参数表示 去重同时进行计数
sort -n 按照数字进行排序
-r 倒序
-k +列数 按照指定列进行排序

11.awk、grep、sed区别

awk 常用来抓取数据和处理数据
grep 常用来过滤
sed 批量处理文件

12.Linux中几个基础符号的意思

1.==是数学意义上的等于

2.= 是赋值 a=b 将b的赋值给a

3.> 就是数学意义上的大

4.<= 就是数学意义上的小于等于
grd

;