可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

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


本文适用于系统管理员、运维工程师、开发人员以及数据处理人员,提供 速查+示例 的格式,方便在使用 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

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言