0

0

awk工具详解

絕刀狂花

絕刀狂花

发布时间:2025-07-21 11:40:15

|

1015人浏览过

|

来源于php中文网

原创

大家好,欢迎再次光临,我是你们的老朋友全栈君。

目录

awk简介

awk的工作原理

awk命令的使用格式

awk简介

AWK是一种专门用于处理文本文件的编程语言,是一个功能强大的文本分析工具。它旨在进行文本处理工作,通常用于扫描、过滤和统计汇总数据,这些数据可以来自标准输入、管道或文件。

awk的工作原理(1):

在读取第一行时,AWK会根据条件进行匹配,并执行相应的操作,然后继续处理下一行数据。默认情况下,不会自动输出数据。如果没有指定匹配条件,AWK会默认匹配所有行。它有一个隐含的循环,条件匹配的次数就是操作执行的次数。

awk的工作原理(2):

AWK逐行读取文本文件,默认以空格或制表符作为分隔符,将每一行分成多个字段,并将这些字段存储在内建变量中,根据模式或条件执行编辑命令。sed命令常用于处理整行,而AWK更倾向于将一行分割成多个“字段”后进行处理。AWK读取信息也是逐行进行的,处理结果可以通过print功能将字段数据显示出来。在使用AWK命令时,可以使用逻辑操作符“&&”表示“与”,“||”表示“或”,“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

awk命令的使用格式

awk选项 ‘模式或条件{操作}’ 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ...

格式: awk关键字 选项 命令部分 '{xxxx}' 文件名

AWK包含几个特殊的内建变量(可以直接使用),如下所示:

FS:指定每行文本的字段分隔符,默认为空格或制表符。

NF:当前处理行的字段数量。

NR:当前处理行的行号。

$0:当前处理行的整行内容。

$n:当前处理行的第n个字段(第n列)。

FILENAME:被处理的文件名。

RS:行分隔符。AWK从文件读取数据时,会根据RS的定义将数据分割成多条记录,而AWK一次仅读入一条记录进行处理。默认值是'\n'。

简说:数据记录分隔,默认为\n,即每行为一条记录。

案例

awk工具详解awk工具详解awk工具详解awk工具详解AWK常用的内置变量包括:$1、$2、NF、NR、

$1:代表第一列,$2:代表第二列,以此类推。

$0:代表整行,NF:一行的列数。

NR:行数。

案例:

awk工具详解awk工具详解awk工具详解awk -F: 'NR==10{print $1}' zz ##打印第10行第一列

awk -F : '{print $NF}' zz ##打印最后一列

awk 'END{print NR}' zz ##打印总行数

awk 'END{print $0}' zz ##打印最后一整行内容

awk工具详解生产案例:

awk工具详解在逐行执行之前和之后执行特定任务,可以使用BEGIN和END关键字。

BEGIN通常用于初始化操作,只在读取数据记录之前执行一次;END通常用于汇总操作,只在读取完数据记录之后执行一次。

awk工具详解AWK的运算:

awk工具详解模糊匹配,用~表示包含,!~表示不包含。

awk -F: '$1~/root/' zz ##包含root的所有行

awk -F: '$7!~/nologin/{print $1,$7}' zz ##打印除了以nologin结尾的第一列和第七列

关于数值与字符串的比较

比较符号:== != >

案例:

awk -F: '$3==0' zz ##打印第三列等于0的行

awk 'NR==5{print}' zz ##打印第五行

商汤商量
商汤商量

商汤科技研发的AI对话工具,商量商量,都能解决。

下载

awk 'NR

awk -F: '$1=="root"' zz ##打印第一列有root的行

awk -F: '$3>=1000' /etc/passwd ##打印第三列大于等于1000的行

awk -F: '$3=1000' /etc/passwd ##打印第三列小于10或者大于等于1000的所有行

awk -F: '$3>10 && $3

awk 'NR>2 && NR

seq 200 | awk '$1%7==0 && $1~/7/' ##打印200内被7整除并且包含7的所有数字

其他内置变量的用法FS、OFS、NR、FNR、RS、ORS

案例:

awk 'BEGIN{FS=":"}{print $1}' zz ##打印之前定义字段分隔符为冒号

awk 'BEGIN{FS=":";OFS="--"} {print $1,$2}' zz ##OFS定义了输出时以什么分隔,$1和$2中间要用逗号分隔,因为逗号默认被映射为OFS变量,而这个变量默认是空格

awk '{print FNR,$0}' /etc/hosts /etc/passwd ##可以看出FNR的行号在追加当有多个文件时

awk 'BEGIN{RS=":"}{print $0}' zz ##打印出以冒号换行输出

awk 'BEGIN{ORS=" "}{print $0}' zz ##把多行合并成一行输出,输出的时候自定义以空格分隔每行,本来默认的是回车键

AWK的高级用法

定义引用变量

a=100

awk -v b="$a" 'BEGIN{print b}' ##将系统的变量a,在AWK里赋值为变量b,然后调用变量b

awk 'BEGIN{print "'$a'"}' ##直接调用的话需要先用双引号再用单引号

awk -v c=50 'BEGIN{print c}' ##AWK直接定义变量引用

调用函数getline,读取一行数据的时候并不是得到当前行而是当前行下一行

案例:

df -h | awk 'BEGIN{getline}/dev\/sda3/{print $0}'

[root@localhost ky17]# seq 12 | awk '{getline;print $0}' 24681012[root@localhost ky17]# seq 12 | awk '{print $0;getline}' 1357911

if语句:AWK的if语句也分为单分支、双分支和多分支

单分支为if() {}

双分支为if() {} else {}

多分支为if() {} else if() {} else {}

案例:

awk工具详解AWK还支持for循环、while循环、函数、数组等

案例:

awk 'BEGIN{x=0};/\/bin\/bash$/ {x++;print x,$0};END {print x}' /etc/passwd

统计以/bin/bash结尾的行数,等同于

grep -c "/bin/bash$" /etc/passwdBEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;AWK再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句

awk工具详解awk -F ":" '!($3

awk 'BEGIN {FS=":"}; {if($3>=1000){print}}' /etc/passwd ##先处理完BEGIN的内容,再打印文本里面内容

awk -F ":" '{max=($3>=$4) ? $3:$4; {print max}}' /etc/passwd (了解)#($3>$4)?$3:$4三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max

awk工具详解awk -F ":" '$7~/bash/{print $1}' zz ##输出以冒号分隔且第7个字段中包含/bash行的第一字段

awk -F ":" '($1~/root/) && (NF==7) {print $1,$2,$NF}' /etc/passwd ##第1个字段中包含root且有7个字段的行的第1/2个字段

awk -F ":" '($7!="/bin/bash") && ($7!="/sbin/nologin/"){print}' /etc/passwd ##/etc/passwd输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行#输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行

awk -F ":" '($NF != "/bin/bash")&&($NF!="/sbin/nologin"){print NR,$0}' /etc/passwd ##跟上面一样效果

通过管道、双引号调用shell命令:echo $PATH | awk 'BEGIN{RS=":"};END {print NR}'

统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句echo $PATH | awk 'BEGIN{RS=": "}; {print NR,$0}; END{print NR}'

awk -F: '/bash$/{print "wc -l"}'/etc/passwd #调用wc -l命令统计使用bash的用户个数,

等同于grep -c "bash$" etc/passwdawk -F: '/bash$/ {print }' passwd | wc -l

发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/da502cff136c2848905d8c0e169ba278

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

18

2026.02.03

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

148

2025.10.17

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

148

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.09.25

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

swoole入门物联网开发与实战
swoole入门物联网开发与实战

共15课时 | 1.3万人学习

swoole项目实战(第二季)
swoole项目实战(第二季)

共15课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号