当前位置: 首页 > news >正文

【one day one linux】好用的数据处理工具awk

awk:好用的数据处理工具

取自《鸟哥私房菜》awk一节

应用:awk是以一行为一次的处理单位,将一行分成数个“字段”进行处理。

 

#awk的命令格式
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

awk后面接两个单引号并加上大括号{}来设置想要对数据的处理动作。awk处理后面接的文件名字.

awk主要处理每一行的字段内的数据,而默认的字段的分隔符为空格键或者[tab]键。

如下的例子,处理last取出的登录数据:

last -n 5

# last -n 5 | awk '{print $1 "\t" $3}'

上面是默认使用空格键作为分隔符。

有上面可以看出awk把每个字段分配一个变量名称,$1表示第一个字段,$2表示第二个字段,而$0表示一整行。

 

awk的处理流程是:

  1. 读入第一行,并将第一行的数据填入$0 $1 $2等变量中
  2. 依据条件类型限制,判断是否进行后面的动作。(上面的没有条件类型)
  3. 做完所有的动作和条件类型  (上面的动作就是"print $1 "\t" $3")
  4. 后面还有行的话,重复以上的动作

awk的内置变量,可以查看到底有几行,几列

变量名称代表意义
NF每一行($0)拥有的字段总数
NR目前awk所处理的是“第几行”数据
FS目前的分割字符,默认是空格键

 

 

 

 

上面的last -n 5的例子来做说明:

  • 列出每一行的账号(就是$1)
  • 列出目前处理的行数(就是awk内的NR变量)
  • 并且说明,该行有多少字段(就是awk内的NF变量)
# last -n 5 | awk '{print $1 "\t lines: "NR "\t columes: "NF}'

有上面的代码可以看出:

  • 当awk后续所有的动作都是用 ' 单引号括起来的
  • print打印时,如果属于非变量的文字需要使用 " 双引号括起来

 

awk的逻辑运算和条件

awk需要使用判断条件,所以就有逻辑运算符,和C语言差不多: "<"   ">"  ">="  "<="  "==" "!="   

下面使用cat 查看/etc/passwd文件的字符串,他的第一个字段是账号,第三个字段是UID,使用awk筛选出UID小于10 的数据

# cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'

可以看到,这里的第一行是没有被处理的,这里是因为我们读入第一行的时候,那些变量$1 $2 ...默认还是以空格分割的,所以我们虽然定义了FS=":"了,但是切仅能作用在第二行后才开始生效。

解决办法:利用BEGIN关键字,like this

# cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}'

 

 

awk计算处理数据

# cat pay.txt | \
awk 'NR==1{printf "%10s %10s  %10s %10s  %10s\n",$1,$2,$3,$4,"Total"} 
NR>=2{total = $2+$3+$4 printf "%10d %10d  %10d %10d %10.2f",$1,$2,$3,$4,total}'

这里这条命令一直运行出错,待稍后查看

 

转载于:https://www.cnblogs.com/panhao/p/5241803.html

相关文章:

  • 新年新起点-荣获2011年度Silverlight方向Microsoft® MVP奖
  • java,关于POJO,查阅资料
  • 阅读计划
  • Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
  • 基于tiny4412的Linux内核移植 -- 设备树的展开
  • 浅谈股市、美元汇率与原油价和黄金价格间的关系
  • pyVmomi入门
  • 清理sga组件
  • Java NIO和IO的主要区别
  • hibernate主键生成策略(转载)
  • 微软,苹果,Google用户体验设计原则
  • QT(1)准备好环境和.pro文件
  • QT(2)Widget的小例子
  • Xcode7 添加PCH文件
  • MySQL事务隔离级别详解(转)
  • 【译】JS基础算法脚本:字符串结尾
  • 10个最佳ES6特性 ES7与ES8的特性
  • input实现文字超出省略号功能
  • java取消线程实例
  • Koa2 之文件上传下载
  • python_bomb----数据类型总结
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redis 中的布隆过滤器
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 闭包,sync使用细节
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 通过npm或yarn自动生成vue组件
  • 问题之ssh中Host key verification failed的解决
  • 用element的upload组件实现多图片上传和压缩
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​渐进式Web应用PWA的未来
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #Linux(帮助手册)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)Eureka服务搭建,服务注册,服务发现
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET CLR Hosting 简介
  • .NET CORE Aws S3 使用
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net经典笔试题
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /var/lib/dpkg/lock 锁定问题
  • :如何用SQL脚本保存存储过程返回的结果集
  • @TableLogic注解说明,以及对增删改查的影响
  • [20150321]索引空块的问题.txt
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android Pro] Notification的使用