awk的用法:

awk 参数 ' BEGIN{} // {action1;action2} ' END{} 文件名

参数:

  • -F :指定分隔符
  • -f :调用脚本
  • -v :定义变量
  • Begin{} :初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
  • // : 匹配代码块,可以是字符串或正则表达式
  • {} :命令代码块,包含一条或多条命令,多条命令用 ;隔开
  • END{} :结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

awk中字符的含义:

字符 功能
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 包含
!~ 不包含
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
+ 匹配时表示1个或1个以上
/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
OFS 输出字段分隔符, 默认也是空格,可以改为其他的
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F [:#/] 定义了三个分隔符

一、print 打印功能:

1、打印文本所有内容
[root@localhost ~]# awk '{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
2、打印文本中第一列内容
[root@localhost ~]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
3、打印文本中第一列、第三列内容,同时中间用空格隔开
[root@localhost ~]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
4、打印文本中第一列、第三列内容,中间不用任何字符隔开
[root@localhost ~]# awk -F: '{print $1$3}' /etc/passwd
root0
bin1
daemon2
5、打印文本第一列、第二列、第三列内容,并以制表符隔开
[root@localhost ~]# awk -F: '{print $1,$2,$3}' OFS="\t" /etc/passwd
root    x       0
bin     x       1
daemon  x       2
6、打印文本第一列内容,并以分行的形式输出
[root@localhost ~]# awk -F: '{print$1;print$2}' /etc/passwd
root
x
bin
x
daemon
x
7、自定义输出第一列、第二列内容
[root@localhost ~]# awk -F: '{print "name:"$1"\tid:"$3}' /etc/passwd
name:root       id:0
name:bin        id:1
name:daemon     id:2
8、显示每行有多少字段
[root@localhost ~]# awk -F: '{print NF}' /etc/passwd
7
7
7
9、将每行字段大于2的打印出来
[root@localhost ~]# awk -F: 'NF>2 {print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
10、将文本中第三行内容输出
[root@localhost ~]# awk -F: 'NR==3{print}' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
11、打印文本所有内容除了第一行
[root@localhost ~]# awk -F: 'NR!=1{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
12、将文本内容输出到另一个文本中
[root@localhost ~]# awk -F: '{print > "1.txt"}' /etc/passwd
[root@localhost ~]# ll
总用量 32
-rw-r--r--. 1 root root 1199 3月   5 17:46 1.txt
13、将文本内容追加到另一个文本中
[root@localhost ~]# awk -F: '{print}' /etc/passwd > 1.txt

二、字符匹配

1、打印文本含有root字段的文本
[root@localhost ~]# awk -F: '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2、打印文本中没有含有root字段的文本
[root@localhost ~]# awk -F: '!/root/{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
3、打印文本中含有rootvillian字段的内容
[root@localhost ~]# awk -F: '/root|villian/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
villian:x:1000:1000:villian:/home/villian:/bin/bash
4、打印以r开头行的内容
[root@localhost ~]# awk -F: '/^[r]/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
rsync:x:1001:1001::/home/rsync:/sbin/nologin
5、打印文本中以root开头的行内容
[root@localhost ~]# awk -F: '$1~/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
6、打印文本中不是以root开头的行内容
[root@localhost ~]# awk -F: '$1!~/root/{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
7、打印文本中以root或者villian开头行的内容
[root@localhost ~]# awk -F: '$1~/root|villian/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
villian:x:1000:1000:villian:/home/villian:/bin/bash
8、打印文本中不是以root或者villian开头行的内容
[root@localhost ~]# awk -F: '$1!~/root|villian/{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
9、统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
[root@localhost ~]# awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd | more -5
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin
filename:/etc/passwd,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/n
10、打印/etc/passwd/的第二行信息
[root@localhost ~]# awk -F: 'NR==1{print "filename: "FILENAME, $0}' /etc/passwd
filename: /etc/passwd root:x:0:0:root:/root:/bin/bash

四、awk 控制语句if-else

1、如果第三列内容大于1000,则输出第一列、第三列内容
[root@localhost ~]# awk -F: '{if($3>=1000)print $1,$3}'  /etc/passwd
villian 1000
rsync 1001
2、如果设置NF变量为"/bin/bash",如果行中含有NF变量,则输出第一列内容
[root@localhost ~]# awk -F: '{if($NF=="/bin/bash")print $1}' /etc/passwd
root
villian
postgres
3、如何第三列内容大于或等于1000,则输出Common,否则输出root or Sysuser
[root@localhost ~]# awk -F: '{if($3>=1000) {print "Common user:%s\n",$1}else {print "root or Sysuser:%s\n",$1}}'   /etc/passwd
root or Sysuser:%sroot
root or Sysuser:%sbin
root or Sysuser:%sdaemon

运维之道 | 三剑客之awk命令 - 排查统替相关推荐

  1. 运维之道 | 三剑客之sed命令 - 增删改查排

    sed命令语法格式 sed [参数] [条件/指令] [文件名称] 参数 功能 -n 取消默认输出 -i 修改文件内容 -e 执行多个指令 -r 识别扩展正则符号 指令 功能 p 输出 d 删除 s ...

  2. Linux运维之道-基础命令

    基础命令 参照 linux运维之道(丁明一) 文章目录 基础命令 一.目录以及文件的基本操作 1. pwd 2.cd 3.ls 4.touch 5.mkdir 6.cp 7.rm 8.mv 9.fin ...

  3. linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法

    原标题:Awk是什么?一文带运维小白快速掌握Linux Awk用法 作者:a8 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以 ...

  4. 运维之道 | Zabbix监控mysql主从同步状态并设置触发微信告警

    一.主机规划 服务器 IP zabbix-server 192.168.1.111 mysql-master.zabbix-agent 192.168.1.115 mysql-slave.zabbix ...

  5. Linux 运维人最常用 150 个命令汇总

    Linux 运维人最常用 150 个命令汇总 命令 功能说明 线上查询及帮助命令 (2 个) man 查看命令帮助,命令的词典,更复杂的还有 info,但不常用. help 查看 Linux 内置命令 ...

  6. 运维之道 | Mysql主从复制+mycat读写分离

    运维之道 | Mysql主从复制 + Mycat读写分离 1.什么是读写分离 读写分离,基本的原理是让主数据库处理事务性增.删.改操作(INSERT.UPDATE.DROP),而从数据库处理SELEC ...

  7. 运维之道 | Redis 集群搭建

    Redis 集群搭建 集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机.同时每个节点至少有一个备份节点,所以下面最少需要创建使用6台主机,才能完成Redis Cluster 集群搭建(主节点. ...

  8. 从扁鹊医术看华为数据中心智能化运维之道

    根据典记,魏文王曾求教于名医扁鹊:"你们家兄弟三人,都精于医术,谁医术最好呢?"扁鹊:"大哥最好,二哥差些,我是三人中最差的一个."文王又问:"那为什 ...

  9. 力作推荐!!!!   防线:企业Linux安全运维理念和实战(向世界500强企业学习Linux安全管理与运维之道)...

    防线:企业Linux安全运维理念和实战(向世界500强企业学习Linux安全管理与运维之道)      新书发售 http://product.dangdang.com/product.aspx?pr ...

最新文章

  1. 经常用到的JS 表单验证函数
  2. archsummit2017见闻和思考
  3. 手持gps坐标转换参数求解方法及在excel中的实现_分享∣Arcgis中62个常用技巧系列二(21-40技巧)...
  4. IO流——流的分类、InputStream、OutputStream、Reader、Writer等
  5. 虚拟Web主机(基于域名配置,基于ip地址,基于端口)
  6. python去重保留唯一一个值_Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)...
  7. 谷歌发布最新版安卓Android,谷歌发布安卓 9 正式版,代号 Android Pie
  8. PyTorch实现自由的数据读取
  9. CXF开发及与Spring整合开发
  10. 中小企业IT建设的小看法2
  11. java课程设计简易记事本
  12. 微信多开下载安装使用及更新方式
  13. Quartz时间表达式详解
  14. MB/s MiB/s之间换算
  15. 运行3项目显示Module ‘“vue“‘ has no exported member ‘xxxx‘. Did you mean ‘Xxxx‘? TS2305: Module ‘“…/…/node_
  16. ESP32使用滑动变阻器(ADC)控制舵机(PWM)Micropython编程
  17. 小srf的游戏(单调队列+dp)
  18. C - Matrix Reducing
  19. 你不得不掌握的前端提交规范(git cz)
  20. 如何使用阿里云接口对系统用户【身份证】实名认证

热门文章

  1. username爆破字典下载
  2. c#实现ftp上传和下载
  3. owasp zap手动访问站点,chrome浏览器闪退
  4. VB外部调用AutoCAD
  5. Kettle出现问题:Unknown error in KarafBlueprintWatcher解决方案
  6. NLP热门词汇解读:预训练、Transformer、无监督机器翻译
  7. Flash的事件机制
  8. 求助 | python画图横坐标时间问题
  9. linux粘着位的作用
  10. 全国计算机等级二级证书foxbase,2001年9月全国计算机等级考试二级FoxBASE笔试真题...