如何向已包含一些标题的 CSV 文件添加标题

问题描述 投票:0回答:3

我的要求是将新标题添加到现有 CSV 文件中,该文件的第一行已经有一些标题。我需要在现有标题的末尾添加新标题。新标头的值为空;我只需要创建标题。

例如下面是我的 CSV 文件

Cust_Name,Cust_ADD
A1,CBD
A2,CBE
A3,CBE

我需要在 CSV 文件末尾添加标题“工资、年龄”。

我试过这个代码

sed -i "1s|\$|,$new_headers|" input.csv

它给我的输出如下

Cust_Name,Cust_ADD
,Salary,age
A1,CBD
A2,CBE
A3,CBE

新标题出现在第二行。

预期输出

Cust_Name,Cust_ADD,salary,age
A1,CBD,,
A2,CBE,,
A3,CBE,,
shell unix awk sed sh
3个回答
1
投票

与任何 awk

% awk '{NR == 1 ? $0=$0",salary,age" : $0=$0",,"}1' file.csv
Cust_Name,Cust_ADD,salary,age
A1,CBD,,
A2,CBE,,
A3,CBE,,

数据

% cat file.csv
Cust_Name,Cust_ADD
A1,CBD
A2,CBE
A3,CBE

1
投票

您可能有 DOS 行结尾,请参阅 为什么我的工具输出会覆盖自身以及如何修复它?.

一旦修复(如有必要),然后使用任何 awk:

$ awk '{print $0 (NR>1 ? ",," : ",salary,age")}' file
Cust_Name,Cust_ADD,salary,age
A1,CBD,,
A2,CBE,,
A3,CBE,,

有关使用 awk 操作 CSV 的更多信息,请参阅使用 awk 高效解析 CSV 的最可靠方法是什么?


0
投票

这可能对你有用(GNU sed):

sed -i '1s/$/,salary,age/;1!s//,,/' file

在第一行添加

,salary,age

在所有其他行上添加

,,

注意第二个替代命令因为它是空的,所以使用之前的正则表达式,但提供了一个要附加的新值,即

s//,,/

© www.soinside.com 2019 - 2024. All rights reserved.