linux awk命令怎么用

来源:AI视频音频作者:新井头衔:网络博主
导读:本期聚焦于小伙伴创作的《linux awk命令怎么用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《linux awk命令怎么用》有用,将其分享出去将是对创作者最好的鼓励。

linux awk命令是linux系统中常用的文本处理工具,它支持按行读取文本,对每一行的内容进行分割、匹配、计算等操作,适合处理结构化的文本数据,比如日志文件、csv格式数据等。

linux awk命令怎么用

awk基本语法结构

awk的基础语法格式如下,其中单引号包裹的是awk的处理逻辑,文件名是要处理的文本文件路径:

awk 'pattern { action }' 文件名

pattern是匹配条件,可以是正则表达式、比较表达式等,action是匹配到内容后执行的操作,默认操作是打印整行内容。如果不指定pattern,会对所有行执行action。

常用内置变量说明

awk提供了多个内置变量,方便用户快速获取文本的行号、字段内容等信息,常用的内置变量如下:

变量名含义
$0当前处理的整行内容
$n当前行的第n个字段,n为数字,从1开始
NR当前处理的行号,从1开始计数
NF当前行的字段总数
FS输入字段分隔符,默认是空白字符(空格、制表符等)
OFS输出字段分隔符,默认是空格

基础使用示例

1. 打印文本指定列

假设我们有一个名为test.txt的文件,内容如下,字段之间用空格分隔:

张三 18 男 北京
李四 20 女 上海
王五 19 男 广州

如果要打印所有行的第一列和第三列,可以使用以下命令:

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

执行后输出结果为:

张三 男
李四 女
王五 男

2. 指定字段分隔符

如果文本使用的是逗号分隔的csv格式,比如data.csv内容如下:

name,age,city
张三,18,北京
李四,20,上海

可以通过-F参数指定分隔符为逗号,打印第二列内容:

awk -F ',' '{print $2}' data.csv

输出结果为:

age
18
20

3. 结合条件筛选行

如果要筛选test.txt中年龄大于18的行,并打印姓名和年龄,可以使用比较表达式作为pattern:

awk '$2 > 18 {print $1, $2}' test.txt

执行后输出:

李四 20

4. 统计行数和字段数

统计test.txt的总行数,可以利用NR变量:

awk 'END {print NR}' test.txt

统计每一行的字段数,打印行号和字段数:

awk '{print "行号:" NR, "字段数:" NF}' test.txt

进阶用法示例

1. 使用BEGIN和END块

BEGIN块在处理文本前执行,END块在处理完所有文本后执行,常用于初始化变量或者输出汇总结果。比如计算所有用户的平均年龄:

awk 'BEGIN {sum=0; count=0} {sum+=$2; count++} END {print "平均年龄:" sum/count}' test.txt

执行后输出:

平均年龄:19

2. 自定义变量和逻辑判断

可以自定义变量存储中间结果,结合if判断实现复杂逻辑。比如统计男女人数:

awk '{
    if ($3 == "男") {
        male_count++
    } else if ($3 == "女") {
        female_count++
    }
}
END {
    print "男性人数:" male_count
    print "女性人数:" female_count
}' test.txt

输出结果为:

男性人数:2
女性人数:1

3. 正则匹配筛选

如果要筛选city字段包含京的行,可以使用正则匹配:

awk '$4 ~ /京/ {print $0}' test.txt

输出结果为:

张三 18 男 北京

如果要筛选不包含京的行,使用!~操作符即可:

awk '$4 !~ /京/ {print $0}' test.txt

linuxawk文本处理命令行工具修改时间:2026-06-13 14:36:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。