awk处理多字段文本的核心是“自动分列+按需引用”,默认以空格或制表符分隔字段,用$1、$2…$NF引用;支持-F指定分隔符,并可结合条件筛选行。

awk 处理多字段文本的核心在于“自动分列 + 按需引用”,它默认把每行按空格或制表符切分成字段,用 $1、$2…$NF 直接调用,不需要手动切割或循环解析。
按字段编号提取内容
这是最常用的操作。比如处理下面这样的员工数据:
Alice 25 Engineer 55000 Bob 32 Manager 72000 Charlie 28 Designer 48000
-
只取姓名和职位:`awk '{print $1, $3}' data.txt` → 输出
Alice Engineer - 取最后一列(薪资):`awk '{print $NF}' data.txt` → 自动对应每行的第4个字段
-
倒数第二列:`awk '{print $(NF-1)}' data.txt` → 对 Charlie 这行就是
Designer
指定分隔符处理结构化文件
当字段不是空格分隔时,必须用 -F 明确告诉 awk 分割规则:
-
/etc/passwd(冒号分隔):
awk -F: '{print $1, $7}' /etc/passwd→ 用户名和登录 shell -
CSV 文件(逗号分隔,含引号时需额外处理):
awk -F',' '{print $2, $4}' sales.csv -
制表符分隔:
awk -F'\t' '{print $1}' log.tsv(注意转义)
结合条件筛选特定字段行
不只是打印,还能带逻辑判断——比如只处理满足条件的那些行:
-
第三列是 Engineer 的人:
awk '$3 == "Engineer" {print $1, $4}' data.txt -
薪资超过 50000:
awk '$4 > 50000 {print $1 " earns $" $4}' data.txt -
同时满足多个条件:
awk '$2 >= 25 && $4
用内置变量控制输出格式
默认字段间用空格分隔,但你可以自定义:
-
用竖线分隔:
awk -v OFS=' | ' '{print $1, $3, $4}' data.txt→Alice | Engineer | 55000 -
统计总行数和字段数:
awk '{sum += $4} END {print "Total:", sum, "Records:", NR}' data.txt -
加表头和汇总:
awk 'BEGIN {print "Name\tRole"} {print $1 "\t" $3} END {print "Count:", NR}' data.txt


















