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}'

相关推荐
码农小白AI4 小时前
AI报告审核加速融入自动化实验室:IACheck破解智能设备时代报告管理新挑战
运维·人工智能·自动化
utf8mb4安全女神4 小时前
克隆的虚拟机怎么更改ip地址
运维
赵民勇4 小时前
fuse-overlayfs命令详解
linux·容器
tedcloud1234 小时前
DeepSeek-TUI部署教程:打造CLI AI助手环境
服务器·人工智能·word·excel·dreamweaver
sulikey4 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
无情的西瓜皮4 小时前
MCP协议实战:用Python从零搭建一个AI Agent工具服务器(保姆级教程)
服务器·人工智能·python·mcp
万能的知了5 小时前
服务器托管 vs 云主机 vs 裸金属:一个决策故事
运维·服务器·云计算
杨云龙UP5 小时前
Oracle RAC / ODA 生产环境指定 PDB 启动 SOP
linux·运维·数据库·oracle
Shingmc35 小时前
【Linux】多路转接之select
linux·网络
luweis6 小时前
企智孪生 ETA(3.3 认知算法层:ETA 的思维内核 3.4 基础架构:算力与弹性)【浙江联保网络 卢伟舜】
大数据·运维·线性代数·ai·矩阵·学习方法