如何使用awk为CSV文件的所有表头列批量添加固定前缀
awk命令修正方案
原命令错误原因
你之前的写法是对整行做全局替换,正则[^a-z_]会匹配所有非小写字母、非下划线的字符,也就是表头之间的分隔符;,所有分隔符被直接替换成了input_file.,就会出现首列无前置、分隔符全部丢失的问题。
推荐修正命令(适配大文件、多列场景)
awk 'BEGIN{FS=OFS=";"} NR==1{for(i=1;i<=NF;i++) $i = "input_file." $i} 1' 目标.csv
逻辑说明
BEGIN{FS=OFS=";"}:同时指定输入、输出分隔符为分号,修改字段后不会自动替换为默认空格分隔符NR==1:仅处理第一行表头内容,不影响数据行- 遍历所有表头字段逐个加前缀,哪怕列数超过千列也能稳定处理
- 末尾的
1是awk常用简写,等价于输出所有行的逻辑
轻量替换方案(仅适用于表头无特殊字符场景)
如果确认表头仅包含小写字母、下划线,也可以用整行替换的写法:
awk 'BEGIN{FS=OFS=";"} NR==1{gsub(/(^|;)/,"&input_file.")} 1' 目标.csv
逻辑说明
正则匹配行首或者分隔符;,替换时保留匹配到的内容(&指代匹配结果)后追加前缀,既保留分隔符,也能给所有列加前缀。
内容的提问来源于stack exchange,提问作者Forge
相关产品推荐
相关产品推荐

