awk命令

释放双眼,带上耳机,听听看~!

AWK命令
awk命令
可以通过awk –version查看awk的版本
文本三剑客的作用
awk:抓取,处理数据
sed:一行一行找数据 替换,修改
grep:过滤
awk命令相关
awk写法格式
awk 参数 “[参数项]” ‘模式{动作}’ 文件名
awk模式项与动作项
模式是条件,根据什么条件来筛选数据。
动作是干啥,对删选出来的数据进行什么操作。
没加{}的是模式,{}里的是动作
如果只有模式,是输出符合模式的整行
如果只有动作,是对整个文件的所有行执行此动作
模式项:正则表达式、比较表达式、范围模式、特殊模式BEGIN和END
了解awk的BEGIN和END模块
awk 参数 “[参数项]” ‘BEGIN{}模式{动作}END{}’ 文件名
在模式项前面有BEGIN模块,在动作项后面有END模块
BEGIN模块告诉awk如何读数据。END模块告诉awk程序要如何结束。
awk命令执行过程:
首先是读取文件第一行,然后查看命令的模式(条件)项,如果符合条件则执行命令的动作项进行操作。如果不符合,则读取下一行,再重复上面的操作。直到读取到文件的结尾。
awk参数
-F参数指定分隔符
指定awk按照参数后面””里的参数项写的符号进行文件内容的切割,不再按照空格来区分。如果不加-F参数,awk默认按照空格进行文本的分隔。比如按照空格来分隔,碰到多个空格在一起的情况,会当做一个空格,也就是一个分隔符来处理
并且参数项可以运用正则,[]里可以指定多个符号,[]+会把[]里的所有符号碰到连在一起的都只作为一个分隔符,就是所谓的贪婪模式
输出
{}动作项里写 {print
KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲ print代表输出的意思。代表取列,$1就是输出第一部分,以此类推。$0代表输出全部内容。$NF默认取每行的最后一部分,不管每行的数量是否相等。
awk命令
多个模式和动作,是’模式{动作}再模式{在动作}’
awk命令
NR和NF
NR表示行号
NF表示竖列号,竖列的数量
如果想要过滤一行字符串里有多少个相同的字符,可用-F指定分隔,再用列数减去1
awk命令
NR和\n换行符的关系
NR这个符号真正的含义不是行号,而是数据被awk读取一段以后,NR会记录一次(自身+1的方式)。由于awk默认以\n作为每次读数据的结束标志,因此NR就恰好等于行号。
假如修改awk默认的读数据时候的默认换行符,也就是读入换行符(读取数据时以什么符号作为一行)。默认awk读入换行符和输出换行符都是\n
可以通过修改BEGIN模块,在awk读取数据之前设定它以什么作为读入换行符和输出换行符。
修改BEGIN和END模块,在取出来的内容开头和结尾添加内容
也可以对模块运行计算,变量的计算,赋值,变量的赋值
但是如果赋值是字母的话,必须要加双引号
awk命令
通过awk ’BEGIN{RS=””}’修改读入换行符
通过awk ’BEGIN{RS=””}’修改读入换行符(RS学名:输入记录分隔符)
通过awk ’BEGIN{ORS=””}’修改输出换行符
通过awk ’BEGIN{ORS=””}’修改输出换行符(ORS学名:输出记录分隔符)
例如:修改读入换行符为:
awk命令
awk命令
修改读入换行符为: 输出换行符为*
把原本的\n作为换行符修改为了用:来作为换行符
把以:为换行符,把换行符替换为单纯的* 并还以\n作为换行符
如果只有输出换行符,是把原本的\n替换成单纯的字符
awk命令
~在awk命令里是启用正则表达式

用于表达与相反的意思
针对某一列的独特过滤需要启用正则表达式
如下:显示第九项以200为开头和结尾的整行内容(200为访问成功)
awk命令
如下:显示第九项以404位开头和结尾的第一部分,去重并计数
awk命令
效果同上,精确查找,第九项为404的行(404为访问失败,报错)
awk命令
过滤到符合条件的,计数并输出的方式
x=x+1是自身加1的赋值,默认起始为0
awk ‘/过滤条件/’{x=x+1;print x}’ 文件名
是过滤此文件符合过滤条件的行 计数并输出,输出结果为一个过程
awk ‘/过滤条件/’{x=x+1}END{print x}’ 文件名
是过滤此文件符合条件的行 只计算计数,通过END模块输出,输出结果为相加之后的数量

如果求一个文件的行数,用awk上面的方法,只需去掉过滤条件即可,因为awk一行一行读数据,读一行,赋值自身加1,最后输出赋值变量结果即可
awk命令
如果是需要对文件里面的值进行运算,需要用$取需要运算的列(如果只有一列直接$0取全部,如果有多列,需要用$后加数字,来限定需要计算的列),再进行自身相加的赋值
awk命令
数组
如果想用一种变量来表示多组数据,通常我们优先考虑数组的形式。就好比是拉大家进一个群,这个群就是数组。
例如:变量名[数字]=不同的值
如果我们只知道变量名,那么我们只能找到变量名和所有的数字。要想找到指定的值,必须知道变量名和对应的数字。
awk命令
for(M in ya)是把ya的值赋值给M,M会有ya的所有的值,一共被赋值了3次,也就是左边的数字,print M是取出M的赋值,就是数字,print ya[M]是有数组又有数组的值,就会输出数组里对应值的内容,就是右边的字母
awk命令
如果需要进行变量的运算,如下:y是从x里取值,取的是数组里所有的值,x[y]中x是数组,y是数组里的值,有数组又有数组里的值,则会输出对应的内容,也就是前面$1+$2运算后的变量
awk命令
通过awk命令去重并计数

awk命令

课后练习
企业面试题1:把相同字母对应的数字相加
4.假如现在有个文本,格式如下:
a 1
b 3
c 2
d 7
b 5
a 3
g 2
f 6
d 9
即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:
a 4
b 8
c 2
d 16
f 6
g 2
即将相同的字母后面的数字加在一起,按字母的顺序输出。
awk命令

awk命令

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

详解Node.js API系列C/C++ Addons(1) API文档

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索