Linux下如何给CSV添加列名为Score、值全为9的新列
处理带表头CSV新增固定列的Shell实现方法
问题场景
现有首行为表头的CSV文件,原始内容如下:
"Gene1","Gene2" "G1","G2" "G2","G8"
需要新增一列,新列列名为"Score",所有数据行该列取值固定为9,处理完成后的目标文件内容如下:
"Gene1","Gene2","Score" "G1","G2",9 "G2","G8",9
此前使用的awk命令存在缺陷:
awk -F ',' -v OFS=',' '{ $(NF+1) = 9; print }' infile.csv > outfile.csv
该命令会给所有行(包括表头行)的新增列都赋值为9,无法给表头行设置正确的列名"Score"。
正确实现命令
通过awk内置的行号变量NR区分表头行和数据行,分别处理即可:
awk -F ',' -v OFS=',' 'NR==1{$(NF+1)="\"Score\""; print; next} {$(NF+1)=9; print}' infile.csv > outfile.csv
命令逻辑说明
-F ',':指定输入内容的字段分隔符为逗号-v OFS=',':指定输出内容的字段分隔符为逗号,保证输出符合CSV格式NR==1分支:匹配文件第一行(即表头行),在该行末尾新增值为"Score"(带CSV要求的双引号)的字段,打印该行后通过next跳过后续逻辑,直接处理下一行- 数据行分支:匹配除表头外的所有行,统一在末尾新增值为9的字段后打印
内容的提问来源于stack exchange,提问作者Christin Canavati
相关产品推荐
相关产品推荐

