使用awk将各种新列添加到CSV文件

使用awk将各种新列添加到CSV文件,awk,csv,Awk,Csv,我有一个CSV文件。例如,列: col1, col2, col3, col4, col5 我需要将其重组为 col1, col2, new_col1, col3, new_col2, col4, new_col3, col5. 行中的值将为空。我想这是必须的 我已经在StackOverflow中尝试了这些问题,但我得到的只是在末尾或开头添加。我需要能够指定需要添加列名的列号/位置。好的,假设您的csv如下所示: col1, col2, col3, col4, col5 1, 2, 3, 4,

我有一个CSV文件。例如,列:

col1, col2, col3, col4, col5
我需要将其重组为

col1, col2, new_col1, col3, new_col2, col4, new_col3, col5.
行中的值将为空。我想这是必须的


我已经在StackOverflow中尝试了这些问题,但我得到的只是在末尾或开头添加。我需要能够指定需要添加列名的列号/位置。

好的,假设您的csv如下所示:

col1, col2, col3, col4, col5
1, 2, 3, 4, 5
然后,命令:

awk 'BEGIN{FS=OFS=","}{print $1,$2,"new_Col1",$3,"new_Col2",$4,"new_Col5",$5}' t.csv
将给出以下输出:

col1, col2,new_Col1, col3,new_Col2, col4,new_Col5, col5
1, 2,new_Col1, 3,new_Col2, 4,new_Col5, 5
你明白了吗?这就是你想知道的吗

更容易阅读:

awk '{print $1","$2",new_Col1,"$3",new_Col2,"$4",new_Col5,"$5}' t.csv
备注:此答案假设没有CSV字段条目具有嵌入或字符的字符串(
“string”

如果上述方法不适用于您的问题,则需要其他方法。有用链接:

  • (Python)
  • (Perl)

如果要向CSV文件添加列,可以执行以下操作:

在开头添加一列:

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file
awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file
awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file
awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file
在末尾添加一列:

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file
awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file
awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file
awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file
在列之前添加列
n

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file
awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file
awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file
awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file
在列后添加列
n

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file
awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file
awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file
awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file
在每列之前添加一列
n1
n2<…<<代码>nm:
(从后面开始)

或者不同的价值观

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=v[i] OFS $(a[i])}1' file
awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=$(a[i]) OFS v[i]}1' file
在列
n1
n2<…<<代码>nm:
(从后面开始)

或者不同的价值观

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=v[i] OFS $(a[i])}1' file
awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=$(a[i]) OFS v[i]}1' file

请显示当前尝试查看问题所在的位置。抱歉,这不是StackOverflow的工作方式。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问和阅读,特别是阅读awk是完美的<代码>$1包含第1列、
$2
、第2列,依此类推。祝你好运,当你陷入困境并需要其他帮助时,请更新你的问题。你的问题有点不清楚,因为你声明:\需要能够指定需要添加列名的列号/位置。\这是否意味着你也要处理标题?回答不错,但你真的启用了“请给我提示和/或示例代码“,是吗;->?”?祝大家好运@谢尔特也许是真的。如果这个问题很有趣,我不介意帮助别人,因为我认为这会帮助别人。尽管如此,我还是会发出一个强制性的信息,表明这不是前进的方向,希望他们的下一个问题可能更符合标准。我希望很明显我并不在乎,因为似乎没有任何方法可以治愈早期海报无法阅读和吸收的问题??附加到
[help]
;-)的页数。最终,你可能会厌倦这些问题,如果不是的话,你是一个比我更好的人;-)。再一次,这是一个非常完美的答案。祝大家好运。