首页/系统/Linux 运维命令速查/awk 字段与列操作
文本处理77 条

awk 字段与列操作

-F 指定分隔符、$NF 取最后字段、NF 数字段、修改字段后重建整行,按列裁剪与重排的核心手法。

Linux 运维命令速查系统更新于 2026-10-13

awk 字段处理是什么

awk 天然按字段工作:默认以空白切分,指定分隔符后按分隔符切,用美元符加序号取字段,整行作为一个特殊变量,字段总数为另一个内置变量。修改任一字段后再输出整行,会按输出分隔符重新拼装,等于顺手做了一次格式化。这些能力让 awk 成为按列裁剪、重排与计算的主力工具。

基本信息

适用平台Linux、Unix 通用;多字符分隔符属于扩展能力
命令语法awk -F'分隔符' '模式 {动作}' 文件
常用内置变量整行、按序号取字段、字段数、输入分隔符、输出分隔符、行号
输出控制修改字段后打印整行会按输出分隔符重拼

典型使用场景

  • 取某几列重新排列后输出
  • 取每行最后一个字段,例如日志里的状态或耗时
  • 按列做统计与求和
  • 改写分隔符:把冒号分隔的文本转成逗号分隔
  • 处理以多字符或正则分隔的文本

常用示例

常用示例
awk -F, '{print $2, $1}' data.csv        # 交换前两列
awk '{print $NF}' access.log             # 取每行最后一列
awk -F: 'BEGIN{OFS=":"} {$3=$3"x"; print}' f
awk -F'[ =]' '{print $2}' app.log        # 正则分隔
awk -F, 'NR>1 {s+=$3} END {print s}' d.csv   # 按列求和
awk 'NF>5' data.txt                      # 只输出字段数大于 5 的行

常用内置变量

变量含义提示
整行变量当前行的完整内容直接打印即原始行
序号字段第 N 个字段编号从 1 开始
末字段变量最后一个字段取末尾列的快捷写法
字段数变量当前行的字段个数可用来过滤行
输入输出分隔符切分与拼接的依据输入用选项设,输出在开始块里设
行号变量总行号与当前文件行号处理多个文件时用于区分
只要修改过任一字段,打印整行时就会按输出分隔符重新拼装,等于自动做了一次格式化;不想被重排就不要动字段。
按单一字符切分对带引号的 CSV 不适用:引号内部的分隔符也会被当成字段边界,复杂结构交给专门的 CSV 工具处理更稳。

易错点

  • -F 对带引号的 CSV 不适用,引号内含分隔符的字段会被切错
  • 多字符分隔符属于扩展能力,各实现支持程度不同,脚本要注意可移植性
  • 忘记设置输出分隔符,重排后的列之间仍然是空格
  • 修改字段会触发整行重拼,进而改变空白,比较输出时要意识到这一点
  • 行末多余的分隔符会产生空字段,使字段数与预期不符

数据来源与参考

  • man 1 awk(gawk 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌