如何使用awk在CSV文件首列前插入新列?
用awk在CSV第一列前插入新列
原始CSV内容
A,B,C,D,E,F 1,2,3,4,5,6 2,3,4,5,6,7 3,4,5,6,7,8 4,5,6,7,8,9
尝试的代码
awk 'BEGIN{FS=OFS=","}{$1=$1 OFS (FNR<1 ? $1 "0 0 0 0" : "col")}1'
期望结果
col,A,B,C,D,E,F 0,1,2,3,4,5,6 0,2,3,4,5,6,7 0,3,4,5,6,7,8 0,4,5,6,7,8,9
修正后的解决方案
直接在每行开头添加对应前缀和分隔符即可,无需修改原有列内容:
awk 'BEGIN{FS=OFS=","} {prefix = FNR == 1 ? "col" : "0"; print prefix OFS $0}' your_file.csv
或者更直观的写法:
awk 'BEGIN{FS=OFS=","} {if (FNR == 1) print "col," $0; else print "0," $0}' your_file.csv
原代码问题分析
- 逻辑判断错误:
FNR<1永远不成立,因为FNR(当前文件行号)从1开始计数,所有行都会使用"col"作为前缀,不符合需求 - 列修改方式错误:
$1=$1 OFS ...会把原有第一列和新前缀拼接,导致第一列变成col,A这类错误内容,而非插入新列 - 冗余内容:原代码里写死的"0\n0\n0\n0"完全没必要,通过行号判断就能统一处理所有数据行
内容的提问来源于stack exchange,提问作者arnpry
相关产品推荐
相关产品推荐

