005 awk命令

命令说明

awk 是面向记录的文本处理语言,默认按列(字段)处理文本,擅长统计、格式化输出和列提取,常与 grep、sed 并称文本处理三剑客。

语法

awk [选项] 'BEGIN{...} /模式/{ 动作 } END{...}' [文件]...

常用参数

参数说明
-F 'sep'指定输入字段分隔符,如 -F: 按冒号分列
-v var=value给 awk 传入变量
内置变量$0 整行、$1 第1列、NF 列数、NR 行号、OFS 输出分隔符

使用示例

$ awk '{print $1, $3}' access.log

输出每行第 1 列和第 3 列

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

以冒号为分隔符提取用户名

$ awk '{print $NF}' file.txt

输出每行最后一列

$ awk 'NR==2,NR==5' file.txt

输出第 2 到第 5 行

$ awk '$3 > 100 {print $1, $3}' data.txt

输出第 3 列大于 100 的行

$ awk '{sum+=$1} END{print sum}' nums.txt

对第 1 列求和

$ awk 'END{print NR}' file.txt

统计文件总行数(wc -l 的 awk 写法)

$ ps aux | awk '$3>80 {print $2, $11}'

找出 CPU 占用超过 80% 的进程

$ awk -F: '$7!~/nologin|false/ {print $1, $7}' /etc/passwd

列出可登录用户及其 shell

实用技巧

  • BEGIN 块在处理第一行前执行(常用于打印表头),END 块在全部行处理完后执行(常用于汇总)。
  • 去重并保持顺序:awk "!seen[$0]++" file。
  • 修改列输出格式:awk -F, 'BEGIN{OFS="|"}{print $1,$2}' 可把逗号分隔转为竖线分隔。
  • awk 适合按列统计,sed 适合替换,grep 适合查找;复杂文本处理优先考虑 awk。