awk按列替换需定位字段(如$2)、选用sub(首匹配)或gsub(全匹配),作用于指定列,不修改原文件;sub返回值需显式print,条件替换结合模式匹配,输出重定向可保存结果。

按列替换单个匹配
只替换每行中**该列第一次出现**的目标字符串。例如把第 3 列里的第一个 old 换成 new:
awk '{$3 = sub(/old/, "new", $3); print}' file.txt
注意:sub 返回替换次数(1 或 0),所以要显式 print;若省略 print,该行不会输出。
按列替换全部匹配
替换某列中**所有符合正则的字符串**。比如把第 2 列所有 abc 都换成 xyz:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
awk '{gsub(/abc/, "xyz", $2); print}' file.txt
更常用的是用分隔符配合输出格式,比如 CSV 文件:
awk -F',' '{$4 = gsub(/ERROR/, "OK", $4); print}' OFS=',' file.csv
带条件的字段替换
只在满足某条件时才替换指定列。例如:仅当第 1 列是 active 时,把第 5 列的数字加 10:
awk '$1 == "active" {$5 += 10} {print}' file.txt- 或用正则判断第 2 列含
test,再替换第 3 列:awk '$2 ~ /test/ {gsub(/fail/, "pass", $3)} 1' file.txt
替换后保存到新文件或覆盖原文件
awk 默认输出到终端。要写入文件:
- 重定向到新文件:
awk '{gsub(/x/, "y", $1); print}' input.txt > output.txt - 模拟“原地修改”(实际是覆盖):
awk '{gsub(/x/, "y", $1); print}' file.txt > tmp && mv tmp file.txt










