Linux awk 命令详解

简介

awkLinux 中强大的文本处理工具,广泛用于模式匹配扫描,数据提取,文本操作。

使用场景:

  • 解析日志文件

  • 汇总数据

  • 格式化文本输出

  • 从文件中提取指定的信息

历史

awk 由三个人共同创造的,以三个人的 last name 的首字母组成

  • Alfred V. Aho

  • Peter J. Weinberger

  • Brian W. Kernighan

基本语法

shell 复制代码
awk 'pattern { action }' file

# pattern 是匹配的模式,如正则表达式
# action 是匹配后进行的操作,如:打印,修改等
# file 要操作的文件,如果不指定文件,则从标准输入中读取

核心概念

记录和字段
  • 记录:文件中的每一行作为一个记录

  • 字段:字段是记录的一部分,通过指定的分隔符分割,默认的分隔符是空格,可以通过 -F 选项自定义分隔符

其中,$1$2$<n> 等代表第几个字段

$NF 代表最后一个字段,$0 代表所有记录,即全部内容

abc def,其中 abc 是一个字段,def 是一个字段

模式

可以是正则表达式、数字比较、条件判断等

要执行的操作

定义在花括号 {} 里面

常用示例

打印所有行数据
shell 复制代码
awk '{ print $0 }' file
打印指定的字段
shell 复制代码
awk '{ print $1, $3 }' file

# 打印每行的第一个和第三个字段
打印模式匹配的行
shell 复制代码
awk '/error/ { print $0 }' file

# 打印包含 error 文本的行
使用条件表达式
shell 复制代码
awk '$3 > 50 { print $1, $2 }' file

# 当第三个字段大于50时打印第一个和第二个字段
使用范围比较表达式
shell 复制代码
awk 'NR >= 5 && NR <= 10 { print $0 }' file

# NR表示行号
# 以上表示打印第五到第十行的内容
自定义字段分隔符
shell 复制代码
awk -F ',' '{ print $1, $2 }' file

# 此处指定分隔符为逗号

内建变量

  • $0:所有记录/全部内容

  • $1$1,...:第几个字段

  • NF:当前行的字段数

  • NR:行号

  • FS:字段分隔符

  • OFS:输出的字段分隔符

  • RS:记录分隔符/行分隔符,默认 \n

  • ORS:输出的记录分隔符/行分隔符

高级用法示例

打印行号
shell 复制代码
awk '{ print NR, $0 }' file
统计字段
shell 复制代码
awk '{ sum += $3 } END { print "Total:", sum }' file

# 统计每行第三个字段之和
替换字段
shell 复制代码
awk '{$2 = "REPLACED"; print $0 }' file

# 替换每行的第二个字段值为 REPLACED
打印模式匹配到的行数
shell 复制代码
awk '/pattern/ { count++ } END { print count }' file
格式化输出
shell 复制代码
awk '{ printf "Line %d: %s\n", NR, $0 }' file
通过管道处理标准输入
shell 复制代码
cat file | awk '{ print $1, $2 }'
awk 命令写到脚本里复用

新建 script.awk 文件,写入以下内容:

shell 复制代码
{ print $1, $NF }

使用 -f 执行脚本文件

shell 复制代码
awk -f script.awk file
相关推荐
信创天地7 分钟前
深耕金融政务核心场景:国产化数据库迁移的全流程架构设计与风险管控
运维·网络安全·系统架构·系统安全·运维开发
ZFB000120 分钟前
【麒麟桌面系统】V10-SP1 2503 系统知识——添加用户
linux·运维·kylin
释怀不想释怀33 分钟前
Docker(网络)
运维·docker·容器
ZFB000137 分钟前
【麒麟桌面系统】V10-SP1 2503 系统知识——进入救援模式
linux·运维·kylin
RisunJan39 分钟前
Linux命令-iptables-restore命令(从文件批量恢复 iptables 防火墙规则)
linux·运维·网络
轻造科技1 小时前
周期压缩极限挑战:APS排产优化这样实现
运维·devops
鲨莎分不晴1 小时前
Nginx 部署前端项目实战指南
运维·前端·nginx
hugerat2 小时前
在AI的帮助下,用C++构造微型http server
linux·c++·人工智能·http·嵌入式·嵌入式linux
ha20428941943 小时前
Linux操作系统学习记录之----自定义协议(网络计算器)
linux·网络·学习
想唱rap3 小时前
MYSQL在ubuntu下的安装
linux·数据库·mysql·ubuntu