第一章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