天天看点

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

第一章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的格式

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

模式:就是条件,根据条件筛选数据。即过滤条件,只用来筛选数据。

动作:干什么。根据模式筛选出来的数据用来做什么。

4.模式动作

示例1 基本的模式和动作

原始文件内容

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

执行命令后屏幕输出

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

命令分析

-F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。

NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。

{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。

awk -F " " 参数解析

指定双引号内的符号作为文件内容的分割符(分列符),进行字段的切割。

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

此处就相当于 awk -F “:” 以:号在作为分列符对字段进行切割。共有七列。

示例2 只有模式

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

命令分析

NR>=2&&NR<=6这部分是条件,表示取第2行到第6行。

但是这里没有动作,这里大家需要了解如果只有条件(模式)没有动作,awk默认输出整行

示例3 只有动作

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

命令分析

-F指定分隔符为冒号

这里没有条件,表示对每一行都处理

示例4 多个模式和动作

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

命令分析

-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在计算机语言中就是回车换行符,不论什么条件下计算机都会执行。

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

9.ORS:输出换行符

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

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

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

eth0的网卡信息

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

利用正则表达式格式抓取ip地址(贪婪模式)

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

因为-F是对管道符传递过来的所有的内容进行文件切割,那么根据分列符号“[ :]+”

来看启用了空格和冒号的贪婪模式。==所谓贪婪模式简单的说就是,你的就是我的,我的还是我的,只要符合条件有多少要多少。==那么第一行第一列就是eth0,第二行第一列为空值,显然第二行有很多个空值(空格),所以前面会被分割成很多列,但是因为有贪婪模式,所以第二行inet前所有空格都被识别成一个。所以取第四列即为ip地址。

无贪婪模式利用正则表达式格式抓取ip地址

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

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

11.企业应用实战

题目:按单词出现频率降序排序(计算文件中每个单词的重复数量)

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

答案:

第一步

取出文件内所有单词,一切符号除外

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

第二步

进行降序排序

Linux文本处理之awk命令精讲 作者(Wizards-dxy)第一章awk基础入门

命令解析

| 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