首页 > 解决方案 > 使用 awk 在 csv 文件的标题行中添加前缀

问题描述

我目前正在处理在大型 CSV 文件(超过 1600 列和 100 行)中收集的数据集。Excel 或 LibreOffice calc 无法轻松处理这些文件以将前缀或后缀连接到标题行,这是我在较小的数据集上所做的。研究这个主题我能够想出以下命令:

awk 'BEGIN { FS=OFS="," } {if(NR==1){print "prefix_"$0}; if(NR>1){print; next}}' input.csv >output.csv

不幸的是,这只会将前缀添加到第一个单元格。例如:

输入:

head_1,head_2,head_3,[...],head_n

"value_1","value_2","value_3",[...],"value_n"

预期输出:

prefix_head_1,prefix_head_2,prefix_head_3,[...],prefix_head_n

"value_1","value_2","value_3",[...],"value_n"

实际输出:

prefix_head_1,head_2,head_3,[...],head_n

"value_1","value_2","value_3",[...],"value_n"

由于列号在不同的 csv 文件中可能是可变的,我想要一个不需要枚举其他地方的所有列的解决方案。这是必要的,因为以下步骤是通过组合所有列(行引用相同实例,以相同顺序,跨所有文件)在单个 csv 数据库中组合各种(5 或 6 个)大型 csv 文件。提前感谢您的时间和帮助。

标签: csvawkheader

解决方案


awk 'BEGIN{FS=OFS=","} NR==1{for (i=1;i<=NF;i++) $i="prefix_"$i} 1' file

推荐阅读