Linux:shell脚本:基础使用(6)《正则表达式-awk工具》

简介

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

awk处理过程: 依次对每一行进行处理,然后输出

1)awk命令会逐行读取文件的内容进行处理

2)awk以':'为分隔符,将第1行数据格式化为7段,每段数据存入1--7变量中。$0存储这1行数据

3)一行处理完成继续处理下一行,直到此文件读取结束
awk常见用法

awk 选项 '模式或条件 { 编辑指令 }' 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ...
特殊的内建变量

$0 表示整个当前行

$1 每行第一个字段

NF 字段数量变量

NR 每行的记录号,多文件记录递增

FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始

\t 制表符

\n 换行符

FS BEGIN时定义分隔符

RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)

~ 匹配,与==相比不是精确比较

!~ 不匹配,不精确比较

== 等于,必须全部相等,精确比较

!= 不等于,精确比较

&&  逻辑与

|| 逻辑或

  • 匹配时表示1个或1个以上

/0-90-9+/ 两个或两个以上数字

/0-90-9*/ 一个或一个以上数字

FILENAME 文件名

OFS 输出字段分隔符, 默认也是空格,可以改为制表符等

ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕

-F':#/' 定义三个分隔符


用法示例:输出

awk '{print}' test.txt

简单的输入全部
第1,3字段

awk '{print 1,3}' test.txt


输出奇数行%2求模运算,余数为1是奇数,0为偶数

awk '(NR%2)==1{print}' test.txt
输出偶数行

awk '(NR%2)==0{print}' test.txt
输出以root开头的行

awk '/^root/{print}' /etc/passwd
输出以......结尾的行

awk '/nologin/{print}' /etc/passwd 统计以/bin/bash结尾的行=== grep -c "/bin/bash"

awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd
统计以空行分割的文本段落数

awk 'BEGIN{RS=""};END{print NR}' /etc/sysctl.conf


按字段输出文本

输出每行中以空格或制表位分割的第3个字段

awk '{print $3}' test.txt

密码为空的行

awk -F ":" '$2==""{print}' /etc/shadow


密码为空的行

awk 'BEGIN {FS==":"}; $2==""{print}' /etc/shadow
输出以':'分割,第7字段包含/bash,的行的第1个字段

awk -F: '7\~"/bash"{print 1}' /etc/passwd


输出第1个字段包含nfs;并且包含8个字段的行的第1,2字段

awk '(1\~"nfs")\&\&(NF==8){print 1,$2}' /etc/services


输出第7个字段不是/bin/bsh也不是/sbin/nologin的行

awk -F: '(7!="/bin/bsh")\&\&(7!="/sbin/nologin"){print}' /etc/passwd


通过管道、双引号调用Shell命令

调用wc -l 命令统计使用bash的用户个数

awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
===等同于下列命令

grep -c "bash$" /etc/passwd
调用w命令,统计在线用户数

awk 'BEGIN {while ("w" |getline) n++; {print n-2}}'
调用hostname,并输出当前主机名

awk 'BEGIN { "hostname" |getline ; print $0}'

相关推荐
在角落发呆7 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
_upupup8 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
百度一下吧8 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JeJe同学8 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR8 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
回眸&啤酒鸭8 小时前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j
闲云野鹤在人间9 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
一个风轻云淡10 小时前
GCC 和 GDB命令简单解读
java·linux·前端
H.莓飛10 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
资料库0110 小时前
Linux 8个常见运维故障排查
java·linux·运维