用多少眼泪才能让你相信 发表于 2024-11-26 04:52:13

shell第十章(awk)

一。awk概论
1.什么是awk
·awk是Linux以及UNIX情况中现有的功能最强大的数据处理处罚工具,awk其名称得自于它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan姓氏的首个字母
d7dbe61ae3    ·awk是一种处理处罚文本数据的编程语言,适合文本处理处罚和报表生成,awk的计划使得它非常适合于    处来由行和列组成的文本数据。
·awk还是一种编程语言情况,它提供了正则表达式的匹配,流程控制,运算符,表达式,变量以及函数等一系列的步伐计划语言所具备的特性,它从C语言中获取了一些优秀的思想
2.工作流程
https://i-blog.csdnimg.cn/direct/dd5551466ae34ab7ac13c6e9e034d56e.png
第一步:主动从指定的数据文件中读取行文
第二步:主动更新awk的内置体系变量的值,例如列数变量NF、行数变量NR、行变量0以及各个列变量1、$2等等
第三步:依次执 步伐中所有的匹配模式及其操作
第四步:当实行完步伐中所有的匹配模式及其操作之后,如果数据文件中仍然另有为读取的数据行,则返回到第(1)步,重复实行(1)-(4)的操作。

3.BEGIN模式与END模式  :格式:
awk  'BBEGIN{ commands }  pattern { commands }  END{ commands}' 
(1)BEGIN模式是一种特殊的内置模式,实在行的时机为awk步伐刚开始实行,但是又尚未读取任何数据之前。因此,该模式所对应的操作仅仅被实行一次,当awk读取数据之后,BEGIN模式便不再成立。所以,用户可以将与数据文件无关,而且在整个步伐的生命周期中,只需实行1次的代码放在BEGIN模式对应的操作中,一样平常用于打印陈诉的标题和更改内在变量的值
(2)END模式是awk的别的一种特殊模式,该模式实行的时机与BEGIN模式恰好相反,它是在awk下令处理处罚完所有的数据,即将退出步伐时成立,在此之前,END模式并不成立。无论数据文件中包含多少行数据,在整个步伐的生命周期中,该模式所对应的操作只被实行1次。因此,一样平常情况下,用户可以将很多善后工作放在END模式对应的操作中EN,一样平常用于打印总结性的描述或数值总和
https://i-blog.csdnimg.cn/direct/20bdd5ca51294897b3b4277dc43cf850.png
注释:BEGIN模式相当于echo,可以单独使用,在终端表现一行内容,在awk中BEGIN和END可以举行省略

二。三种输出方式
1.下令举行展示
https://i-blog.csdnimg.cn/direct/f0e3850ff4c344c8bae5d15ea18f5d1e.png
2.半下令半脚本举行展示
建立awk1.awk文件
https://i-blog.csdnimg.cn/direct/d243360321c14904b9706e525e49c877.png
实行:awk -f 脚本名   文件名
https://i-blog.csdnimg.cn/direct/710323a034044555918c5461ee38aac6.png
3.脚本实行:
https://i-blog.csdnimg.cn/direct/7635e968e5f0405a955fd353f53a5cfd.png
awk脚本不能用bash举行编辑,需要./awk1.awk来举行编辑,同时也需要为此文件举行提权x
格式:
https://i-blog.csdnimg.cn/direct/8086aa6ddb314e21b6f5ce578ff8f52e.png

三。记录和域
awk以为输入文件是布局化的,awk将每个输入文件行界说为记录,行中的每一个字符串界说为域,域之间用空格,tab键或者其他符号来举行分隔,分隔域的符号就叫做分割域,默认以为空格或者tab
awk界说域操作符$来指定实行的域(域就是列),域操作符$背面跟数字或者变量来标识域的位置($2就表示第二列),每条记录的域从1开始编号,如$1标识第一个域,$0标识所有域(也就是打印所有的内容)
https://i-blog.csdnimg.cn/direct/70485a381a6648f3ac8010d881f92348.png
https://i-blog.csdnimg.cn/direct/4aee20872a9643edb80af806df519aaf.png
注释:先把第一行举行输入,在选择第一列举行打印,先按行举行处理处罚
案例一:取出本机的ip地址:
https://i-blog.csdnimg.cn/direct/faee5e995eb54f7db387dc1d58e899d7.png
案例二:取出不以#开头的行,且取出需求信息
格式:awk '条件/{实行的操作}'  文件名  (条件先行向操作,再实行对列的操作)
https://i-blog.csdnimg.cn/direct/eecf63b7e711498687e87358ac91b9b5.png

四。设置空格符方式
1.参数-F,能指明分隔符,例如下图对于/etc/passwd,里面的分隔符是:而不是空格
https://i-blog.csdnimg.cn/direct/eb183e722c3742ce86135dd990447456.png
https://i-blog.csdnimg.cn/direct/de149c41c9a94dfc80f4bd4a4458dc32.png
注释:要输出多列的话,中心用空格去隔断
2.在BEGIN下使用FS
https://i-blog.csdnimg.cn/direct/baa09334ed26404089e58b51007f872d.png
注释:通过BEGIN状态的FS可以自主设置指定空格符

五。NR,NF,FILENAME量
NR变量:表示记录数,即记录有多少行,
NF变量:表示记录的域数量,即记录有多少列
FILENAME:处理处罚的文件名
https://i-blog.csdnimg.cn/direct/804034280faf441fa6c7e25535b02122.png
https://i-blog.csdnimg.cn/direct/4a315b295b4a48269a8166e8fec07b2a.png

六。awk的变量
https://i-blog.csdnimg.cn/direct/9f0f908c52cd4c4cb481b50901f6972d.png
1.体系变量:
https://i-blog.csdnimg.cn/direct/51e1d470f7a24691b863e1a190049161.png
FS:指定文件中的某一个符号为分隔符,再举行截取
OSF:截取事后的内容,使用指定的符号举行拼接
https://i-blog.csdnimg.cn/direct/5584ef475c09423e970a9c2dd805d01f.png
案例一:打印行号的两种方法:
https://i-blog.csdnimg.cn/direct/22bbce6b47854deabcaa412f20f3338e.png
2.自界说变量:
(1)方法1:再BGGIN模式内容下界说自界说变量
https://i-blog.csdnimg.cn/direct/e3e7a7f540ef4076b60efe5873ec630f.png
(2)方法2:使用-v参数举行自界说参数
https://i-blog.csdnimg.cn/direct/047fc044341649ffbb908c2f7f23fedf.png

七。awk操作符:
awk是一种编程语言情况,因此,它也支持常用的运算符以及表达式,例如:算数运算符,逻辑运算以及关系运算符
1.算数运算符:+ - * /    ^(指数)  **(指数)
https://i-blog.csdnimg.cn/direct/8af03739ee864c018dbc8c6164ee2ff1.png
案例一:计算某个文件下的总字节数
https://i-blog.csdnimg.cn/direct/3db5411404d54eef8479e6ccebc9b7d8.png
注释:BEGIN和END之间的{}间需要举行空格处理处罚,{}内的内容需要;举行分隔,而print内需要,举行分隔
2.赋值运算符:=  +=  -=  /=  %=   ^=
https://i-blog.csdnimg.cn/direct/a5db0a031c0844efaadc203975783dbc.png
案例1:删选出ifconfig里面的ip地址
https://i-blog.csdnimg.cn/direct/8801a1421d174959a97d308a59f21b56.png
注释:NR:行号等于2的时候,打印第二列
案例2:打印/etc/passwd文件内的第六行
https://i-blog.csdnimg.cn/direct/bd8bface8f144b44bfc8ec9a2c336888.png
3.条件运算符:三目
格式:expression ? value1 :  value2
是一种三目运算符,原则:表达式expression成立时候,value1作为整个表达式结果,否则为value2作为整个表达式是结果
案例1:判定文件内每一行两个数的最大值
https://i-blog.csdnimg.cn/direct/36075c09aac94f949cd2f25426e5cc34.png
4.逻辑运算符
&&   ||  !
5.关系运算符
>  <    >=   =<   ==  !=  ~(匹配)   !~(不匹配)
案例:查询/etc/passwd 文件第三列小于10以下的数据,且仅列出账号与第三列
https://i-blog.csdnimg.cn/direct/f847b57bebb74384a8e8699761d3a4d6.png
https://i-blog.csdnimg.cn/direct/402faa90b58c41559f6b9d7f9460846a.png
6.其他运算符:++(自增)   --(自减)   +  -等
https://i-blog.csdnimg.cn/direct/ba0ee1225f414f88b6b5678243c71a78.png
注释:awk中的操作数为非数值型计算时会转为数值0
https://i-blog.csdnimg.cn/direct/a8045baf8b3840f2bbf1b3c96cfcbe61.png
注释:awk中变量中未赋值参与算数运算时初始值为0



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: shell第十章(awk)