跳转到内容

Awk 命令

Awk 既是一个强大的 Linux 命令行工具,也是一种专门用于文本处理和报表生成的编程语言。 它按行读取文件,默认通过 空格或制表符 将每行切分为多个字段(Field),随后执行用户指定的匹配与操作逻辑。

Terminal window
awk [选项] '条件 { 动作 }' 文件名

若未指定“条件”,则默认对每一行执行“动作”。


Awk 提供了极其丰富的内置变量来控制游标与文本块:

内建变量含义与作用
$0代表当前读取的 完整一整行 文本。
$1, $2代表被分隔符切分后的 第 n 个字段(索引从 1 开始)。
NF(Number of Fields) 代表当前行拥有的 字段总数
👉 $NF 常用于提取 最后一个字段
NR(Number of Records) 代表当前已处理的 行号
FILENAME当前正在处理的输入文件名称。

2.1. 实战演示:自定义分隔符 (-F)

Section titled “2.1. 实战演示:自定义分隔符 (-F)”

使用 -F 参数可以重写默认的空格切分规则。例如,提取 /etc/passwd 中以冒号分割的用户名:

Terminal window
awk -F ':' '{ print $1 }' /etc/passwd

作为“条件”过滤出符合正则的行,然后再执行动作:

Terminal window
# 仅对包含 "usr" 字符串的行,打印其第一个字段
awk -F ':' '/usr/ {print $1}' demo.txt

动作区块 {} 内部支持 C 语言风格的编程语法:

Terminal window
# 判断第一个字段首字母是否大于 "m",动态输出不同内容
awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt

print 中使用逗号 , 代表输出时用空格分隔;使用双引号 "" 原样输出静态字符:

Terminal window
# 输出:整行内容 ) 第二个字段
awk '{ print $0, ")", $2 }' demo.txt