当前位置:首页 > 技术文章 > 正文内容

AWK 语法速查表(Linux 文本处理工具实用指南)

douba34周前 (08-05)技术文章13


本文适用于系统管理员、运维工程师、开发人员以及数据处理人员,提供 速查+示例 的格式,方便在使用 AWK 时快速查阅。





1. 基本结构


awk '条件 {动作}' 文件名


  • 条件:可以是模式匹配、表达式、行号等
  • 动作:执行的操作,如 print、赋值、统计等
  • 默认操作为 print $0(即打印整行)




2. 常用内建变量


变量

含义

$0

当前整行

$1~$n

第 1 至第 n 个字段

NR

当前处理的行号

FNR

当前文件中的行号(用于多文件)

NF

当前行字段总数

FS

输入字段分隔符(默认空格)

OFS

输出字段分隔符

RS

输入行分隔符(默认换行)

ORS

输出行分隔符

FILENAME

当前正在处理的文件名





3. 快速命令速查(经典用法)



基础操作


awk '{print}' file.txt # 打印每一行

awk '{print $1}' file.txt # 打印第一列

awk '{print $1, $3}' file.txt # 打印第1和第3列

awk '{print NR, $0}' file.txt # 打印行号+整行内容


条件匹配


awk '$1 == "root"' /etc/passwd # 第1列是root的行

awk '$3 > 1000' /etc/passwd # 第3列大于1000的行

awk '$1 ~ /nginx/' access.log # 第1列包含nginx

awk '$1 !~ /test/' file.txt # 第1列不包含test


多条件


awk '$3 > 50 && $3 < 100' scores.txt

awk '$2 == "yes" || $4 == "pass"' file.txt


范围与行号


awk 'NR==3' file.txt # 第3行

awk 'NR>=2 && NR<=5' file.txt # 第2~5行

awk 'NR%2==0' file.txt # 偶数行





4. 格式化输出


awk '{printf "Name: %-10s Score: %3d\n", $1, $2}' students.txt


  • %-10s:左对齐字符串,宽度10
  • %3d:右对齐数字,宽度3





5. 统计计算


awk '{sum += $2} END {print "Total:", sum}' file.txt

awk '{if($2>60) pass++} END {print "Passed:", pass}'

awk '{count++; sum+=$3} END {print "Avg:", sum/count}'





6. 字符串处理函数


函数

用法示例

说明

length(s)

length($1)

返回长度

substr(s,m,n)

substr($1,2,3)

字符串子串

index(s,t)

index($1,"abc")

子串位置

tolower(s)

tolower($1)

转小写

toupper(s)

toupper($1)

转大写

split(s,a,sep)

split($1,arr,",")

字符串分割为数组




7. 数组与聚合


awk '{count[$1]++} END {for (i in count) print i, count[i]}' file.txt

awk '{sum[$2]+=$3} END {for (i in sum) print i, sum[i]}' scores.txt


  • 实现“分组计数 / 分组求和”等聚合功能





8. BEGIN 与 END 模块


awk 'BEGIN {print "Start"} {print $1} END {print "Done"}' file.txt


  • BEGIN{}:在读文件前执行一次
  • {}:每行执行
  • END{}:读完后执行一次






9. 设置分隔符(输入/输出)


awk 'BEGIN {FS=":"; OFS=","} {print $1, $3}' /etc/passwd


  • FS=":":输入按冒号分割
  • OFS=",":输出用逗号连接字段






10. 实用小技巧合集


用法

示例

查看字段数

awk '{print NF}'

删除首列

awk '{$1=""; print}'

删除空行

awk 'NF>0'

查看最大值

awk '$1>max {max=$1} END{print max}'

倒序输出

awk '{a[NR]=$0} END{for(i=NR;i>=1;i--) print a[i]}'





示例练习题(建议实操)



  1. 提取 CSV 中年龄 > 30 的用户行
  2. 统计访问日志中每个 IP 的访问次数
  3. 计算学生成绩表的平均分和最高分
  4. 删除日志中重复行,仅保留第一条
  5. 将原始数据表按字段重排序并输出为 JSON 格式(进阶)






总结:常见 awk 使用清单


类别

关键命令

打印

print / printf

条件

== != ~ !~

结构

BEGIN / END

变量

$0 $1 NF NR

分隔符

FS / OFS

聚合

sum[] / count[]

函数

length substr split

相关文章

Linux远程文件传输神器:rz / sz 全指南(含实操示例)

原文链接:「链接」在日常使用 Linux 服务器时,是否常常因为文件传输问题而苦恼?复制粘贴效率低,FTP 配置复杂?今天推荐一套简单高效的终端工具组合:rz 和 sz。这两个命令搭配使用,能在本地与...

一天一个Linux命令:文件的查看「查」

命令解释Cat:显示文件,可以连接多个文件形成新文件More:分屏显示文件内容,只可向下翻屏Less:分屏显示文件内容,只可向上翻屏Head:查看文件头部内容,默认前十行Tail:查看文件尾部内容,默...

如何查询 Linux 中 CPU 的数量?这几个命令要知道!

在深入命令之前,先聊聊为什么要关心 CPU 数量。想象一下,你是个系统管理员,手底下管着几十台服务器,突然有台机器跑任务慢得像乌龟,你得搞清楚是不是 CPU 不够用。或者你是程序员,想写个多线程程序,...

如何在 Linux 中将 FTP 用户限制为目录

1. 概述在本文中,将配置 vsftpd 以限制用户在通过 FTP 建立连接时浏览父目录。将通过创建 FTP 用户并修改 vsftpd.conf 文件中的默认配置来实现这一点。2. 设置 FTP 用户...

filezilla,非常实用的ftp工具,远程Linux上传、下载和文件管理

今天给小伙伴们推荐一款非常好用的Linux远程工具,filezilla。在实际的开发过程中,时间就是项目的生命线,欲善其事,先利其器!如果你使用命令ftp上传、下载,加上远程登录、文件授权,烦不甚烦,...

Steam Deck支持安装Windows 11了:新版固件支持fTPM

近期发售的 Steam Deck 虽然预装的是基于 Linux 的 Steam OS 系统,但是 Valve 一直打算让这款游戏掌机支持 Windows 系统。现在该公司消除安装 Windows 11...