awk: 好用的数据处理工具

引言

平常工作或学习中总是需要对一些数据进行处理(例如在工作中,需要对日志的一些数据进行统计)。而awk 这是好用的工具之一,倾向于一行当中分成数个字段进行处理。

基本概念

公式

awk '条件类型1{操作1} 条件类型2{操作2} ...' filename

操作说明

处理对象

两个单引号+大括号{} 设置想要对数据进行的处理操作, filename表示处理的数据文件。

1、可以对文件进行操作。 如: awk '***' filename
2、 可以接前一段命令的输出。 如: grep *** filename | awk '***' 表示对查询结果的处理

处理流程

awk '条件类型1{操作1} 条件类型2{操作2} ...' filename
1、读入第1行,并将第1行的数据写入$0、$1、$2… 其中$0表示整行, $n表示分割之后第n列(这里会有个坑,后续会碰到
2、根据『条件类型』的限制,判断是否需要进行后面的"操作"。
3、完成所有操作与条件类型、
4、若还有后续的【行】的数据,重复1~3。

分隔符

前面说到awk主要处理每行字段内的数据,这意味着要对每一行进行分段。默认分割字段为"空格键" 和 “[Table]键”。

如在文件中写入"123 234" echo "123 234" > 1.data
然后如果想分别打印出来则可以使用awk '{print "第一列:"$1"\t第二列:"$2}' 1.data
在这里插入图片描述
如果在文件中写入的是"123,234" echo "123,234" > 2.data
那在想要得到相同的效果, 则需要设置分隔符定义:

1、 可以使用 -F’,'的形式: awk -F',' '{print "第一列:"$1"\t第二列:"$2}' 1.data
在这里插入图片描述
emmmm 貌似出了问题。。检查一下,发现是 1.data,中间为空格,因此以逗号(,) 分割的话,只会分割出一列来。第二列的值为空。
修改过来后,解决
在这里插入图片描述
2、可以采用awk的内置变量帮忙"FS" awk '{FS=","} {print "第一列:" $1 "\t第二列"$2}' 2.data
在这里插入图片描述
emmmm 貌似又粗了问题。。再检查一下,看似没问题。
这里就是上面说到的坑
在这里插入图片描述
对于第一行的处理,是先读入,再根据分隔符(此时没有用-F设置,因此还用的是默认分隔符【空格】or【TAB】 )填入$0 …
直到第二行再以FS=',' 进行处理
因此解决办法就是采用流程控制关键词BEGIN
BEGIN后的操作块 表示在处理任何输入数据之前执行,通常用来修改内置变量的值,例如域分隔符FS,输出分隔符OFS,每行间的分隔符ORS等
其他的流程控制关键词后续会统一说明

内置变量

awk自带多种内置变量,熟练掌握可以再处理数据时更加得心应手

变量名称代表意义
NF每一行($0)拥有的字段总数
NR目前awk所处理的是第几行数据
FS目前的分隔字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值