awk提取列的关键在于分隔符设置、字段定位及特殊内容处理:默认空格/制表符分隔,用-f指定分隔符,用$nf取末列,含空格字段需正则匹配,加条件可筛选后输出。

直接用 awk '{print $N}' 就能打印第 N 列,关键在分隔符是否默认、字段是否对齐、内容是否含空格等细节。
基础列提取:默认空格/制表符分隔
awk 默认把连续空格或制表符当分隔符,自动合并多个空格。适合对齐清晰的文本:
- 打印第一列:
awk '{print $1}' file.txt - 打印第一列和第三列:
awk '{print $1, $3}' file.txt - 打印最后一列:
awk '{print $NF}' file.txt - 打印倒数第二列:
awk '{print $(NF-1)}' file.txt
指定分隔符:应对冒号、逗号、竖线等
用 -F 显式声明分隔符,避免误切字段:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- /etc/passwd 中取用户名和 UID:
awk -F ':' '{print $1, $3}' /etc/passwd - CSV 文件取第 2 和第 4 列:
awk -F ',' '{print $2, $4}' data.csv - 日志中按竖线取状态码和字节数:
awk -F '|' '{print $5, $8}' access.log - 支持多字符分隔符,如冒号或分号:
awk -F '[:;]' '{print $1, $2}' file.txt
处理含空格的字段:比如引号包裹的 User-Agent
当某列本身含空格(如日志中的完整 UA 字符串),不能靠简单分隔符切分,得用正则定位:
- 用
match()找到双引号内内容起始位置:awk '{start = match($0, /"([^"]*)"/); if (start) print substr($0, RSTART+1, RLENGTH-2)}' access.log - 用正则定义字段分隔符,跳过引号内空格:
awk -F '"[^"]*"|\s+' '{print $1, $2}' access.log - 对齐混乱但空格多的文本,用
-F '\s+'强制按“一个或多个空白”切分
加条件再打印:只输出满足规则的列
在 {print ...} 前加判断,让 awk 先筛选再输出:
- 只打印第 3 列大于 1000 的用户名:
awk -F ':' '$3 > 1000 {print $1}' /etc/passwd - 匹配包含 “nginx” 的进程行,输出 PID 和命令名:
ps aux | awk '$11 ~ /nginx/ {print $2, $11}' - 跳过空行和注释行,再取挂载点:
awk '!/^$/ && !/^[[:space:]]*#/ {print $2}' /etc/fstab










