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

awk工具(三剑客)

1、awk介绍

awk:(三剑客之一)

awk:是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk则更支持分段,默认会以空格为分隔符将每行分段,对分段分析处理(匹配 查找 )

awk的版本:

awk:主要有三个版本:awk(GPL版本)  nawk(new 增强版)   gawk(GUN版本)

2、awk的基本用法:

2.1:打印指定内容(指定段):

1
2
3
4
5
[root@localhost  awk ] # awk -F ':' '{print $1}' test.txt      # -F参数用来指定文件分隔符,默认是以空格为分隔符:
root
bin
daemon
adm

注意:默认以文件内容里空格为分隔符打印:

打印整个文本文档:使用 "$0"  则打印整个文本:

1
2
3
4
[root@localhost  awk ] # awk '{print $0}' test.txt
root:x:0:0:root: /root : /bin/bash
bin:x:1:1:bin: /bin : /sbin/nologin
daemon:x:2:2:daemon: /sbin : /sbin/nologin

也支持同时打印多个段落,支持手动指定分隔符:打印后的内容默认空格为分隔符显示

1
2
3
4
[root@localhost  awk ] # awk  -F ':' '{print $1,$2,$3}' test.txt     #默认则以空格为分隔符:    
root x 0
bin x 1
daemon x 2

也支持对打印后的文件手动指定分隔符:如下:对打印后的内容手动指定分隔符“#”并显示:

1
2
3
4
5
[root@localhost  awk ] # awk  -F ':' '{print $1"#"$2"#"$3}'   test.txt         #手动对打印后的内容分隔符以"#"为分隔符显示:
root #x#0
bin #x#1
daemon #x#2
adm #x#3

注意:指定分隔符后该命令只识别指定的分隔符,如果莫行无指定分隔符,则会打印整行:

2.2:awk的匹配功能(用 "~" 来表示匹配)

针对数学表达式的用法

  • 数值比较

当'$3>=1000 {print $1}'时:
[root@adai003 awk]# awk -F ':' '$3>=1000 {print $1}' test.txtuser001

当'$3>="1000" {print $1}'时:
[root@adai003 awk]# awk -F ':' '$3>="1000" {print $1}' test.txt |head -3daemon
adm
lp

匹配字符串:
[root@adai003 awk]# awk -F ':' '$7!="/sbin/nologin" ' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash“!=”表示不等于

说明: 当“1000”加引号时会被当做是字符串,以ASC码(二进制)的方式进行计算处理,不加引号的时候会被当做是数值处理。

[root@adai003 awk]# head -n3 test.txt |awk -F ':' '{OFS=":"} $1="root"'root:x:0:0:root:/root:/bin/bashroot:x:1:1:bin:/bin:/sbin/nologinroot:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' '$3=="0" {print $1}' test.txtroot

说明: 当使用一个“=”等号时表示为等号前面字符赋值,使用两个“==”表示逻辑关系(进行判断)。

9.7 awk 命令(下)

  • 字符比较大小

[root@adai003 awk]# awk -F ':' '$3<$4' test.txtadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@adai003 awk]# awk -F ':' '$3==$4' test.txt |head -3root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdowntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

说明: “&&”表示并且。

[root@adai003 awk]# awk -F ':' '$3>1000 || $7!="/sbin/nologin"' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash[root@adai003 awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt root:x:0:0:root:/root:/bin/bashuser001:x:1000:1000::/home/user001:/bin/bash

说明: “||”表示或者。

OFS指定打印时的分隔符

语法1:
[root@adai003 awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt root#0#/bin/bashuser001#1000#/bin/bash语法2:
[root@adai003 awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt root#0#/bin/bashuser001#1000#/bin/bash
  • NR (=number row)表示行号

[root@adai003 awk]# awk -F ':' '$3<5 && $7!="/sbin/nologin" {print NR":"$1}' test.txt1:root[root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NR":"$1}' test.txt4:adm5:lp打印前三行:
[root@adai003 awk]# awk -F ':' 'NR<=3' test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' 'NR<=3 && $1~/root/' test.txtroot:x:0:0:root:/root:/bin/bash

注: 类似于grep -n。

  • NF (=number fragment)表示段数(列)

[root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NF":"$1}' test.txt7:adm7:lp
  • 求和

[root@adai003 awk]#  awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt5657









本文转自 芬野 51CTO博客,原文链接:http://blog.51cto.com/yuanhaohao/2062316,如需转载请自行联系原作者

相关文章:

  • SharePoint 2010 服务应用程序(Service Application)架构(1)
  • 【转】微服务架构模式简介
  • Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt【转】
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)...
  • 文档转换拾遗
  • jfinal框架知识
  • EL表达式详解
  • 1065. A+B and C (64bit) (20)
  • 关于oracle数据库高版本向低版本迁移的解决方法
  • linux head-common.s分析(转)
  • 使opensuse界面不显示中文
  • echo
  • python学习笔记(六)之集合1
  • 转java中静态方法和非静态方法的存储
  • 深入了解以太坊
  • .pyc 想到的一些问题
  • 【Leetcode】104. 二叉树的最大深度
  • ➹使用webpack配置多页面应用(MPA)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • centos安装java运行环境jdk+tomcat
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Date型的使用
  • Debian下无root权限使用Python访问Oracle
  • Github访问慢解决办法
  • java8 Stream Pipelines 浅析
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • React as a UI Runtime(五、列表)
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 初探 Vue 生命周期和钩子函数
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 整理一些计算机基础知识!
  • ​Java并发新构件之Exchanger
  • #if 1...#endif
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)Elastix图像配准:3D图像
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (七)Java对象在Hibernate持久化层的状态
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • ??eclipse的安装配置问题!??
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [100天算法】-实现 strStr()(day 52)
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [AX]AX2012 R2 出差申请和支出报告
  • [CentOs7]iptables防火墙安装与设置
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!