> 文本处理与搜索 > awk

awk 快速指南

一个流处理工具,用于以记录和字段为单位处理文本流,执行过滤、转换和聚合。本文总结了基于 GNU awk (gawk) 的常见选项和典型模式。

概述

awk 读取输入为记录(默认:行),通过字段分隔符(FS)分割,然后应用模式/动作 { ... } 以所需的输出(OFS)导出。常见用途包括列提取、条件过滤、求和/平均值计算、格式转换等。

主要内置变量

控制输入/输出操作和格式的代表性内置变量。

  • NR: 到目前为止读取的记录(行)号
  • FNR: 当前文件中的记录号
  • NF: 当前记录的字段数量
  • FS: 输入字段分隔符(默认空格)
  • OFS: 输出字段分隔符(默认空格)
  • RS: 记录分隔符(默认换行符)
  • ORS: 输出记录分隔符(默认换行符)

基本形式

awk '模式 { 动作 }' input.txt
awk -f program.awk input.txt

在一行中传递模式/动作块,或使用 -f 传递脚本文件。

主要选项

按场景分组了工作中常用的选项。包括 gawk 兼容选项。

1) 基本执行/输入

2) 字段/变量传递

3) 调试/兼容性(gawk)

4) 帮助/版本

生成的命令:

请尝试组合命令。

描述:

`awk` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

常用模式

列提取

awk -F ':' '{ print $1, $3 }' /etc/passwd

只输出由冒号分隔的第1、第3个字段

条件过滤

awk '$5 > 100 { print }' data.tsv

只输出第5个字段值大于100的记录

聚合示例

awk '{ sum += $2 } END { print sum }' data.txt

第二个字段求和

变量传递和格式

awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt

将 OFS 指定为逗号并只输出特定键

实战技巧

由于是逐行流处理,与管道结合使用非常强大。

  • 字段分隔符可使用正则表达式: -F '[,:\t]+'
  • 可通过多个 -e 分段编写程序
  • 长脚本可使用 -f 分离并用 git 进行版本管理
  • 输出格式可适当调整 OFS/ORS
  • 大容量输入时,只保留最少必要操作并简化管道

相关命令

功能上相似或经常一起使用的命令。



相同类别命令