csv - 使用 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 文件。提前感谢您的时间和帮助。
解决方案
awk 'BEGIN{FS=OFS=","} NR==1{for (i=1;i<=NF;i++) $i="prefix_"$i} 1' file
推荐阅读
- python - Pandas groupby 标记日期小于 n 个月
- angular - Angular RxJS:使订阅者回调按顺序运行
- django - 赋予对象与其外键字段相同的字段值
- pytorch - pytorch LSTM 的损失没有减少
- git - 如何强制 Git 通过其 ssh 连接使用 socks 代理?
- laravel - Laravel(带有 vuejs 和 vuex)无法获取状态
- javascript - 静态使用博客图片
- python - Python中的列表变量
- python - 为什么无法识别 Python-Bottle Restful 中的完整 URL
- python - 在积极的后视中使用积极的前瞻?