我的要求是将新标题添加到现有 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,,
与任何 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
您可能有 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 的最可靠方法是什么?。
这可能对你有用(GNU sed):
sed -i '1s/$/,salary,age/;1!s//,,/' file
在第一行添加
,salary,age
。
在所有其他行上添加
,,
注意第二个替代命令因为它是空的,所以使用之前的正则表达式,但提供了一个要附加的新值,即
s//,,/
。