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

时间:2018-10-11 09:13:32

标签: csv awk

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

col1, col2, col3, col4, col5

我需要将其重组为

col1, col2, new_col1, col3, new_col2, col4, new_col3, col5.

行中的值将为null。我假设必须使用

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

2 个答案:

答案 0 :(得分:1)

好吧,假设您的csv看起来像这样:

for line in sys.stdin:
    year, rating = line.strip().split('\t')
    year, rating = [int(year), float(rating)]

然后,命令:

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

答案 1 :(得分:1)

备注::此答案假定没有CSV字段条目具有字符串("string")且带有嵌入的<逗号>-或-字符< / em>。

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


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

在开头添加一列:

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file

在末尾添加一列:

awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file

在列n之前添加一列:

awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file

在列n之后添加列:

awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file

在每列n1 <n2 <... <nm之前添加一列:(从背面开始)

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a)}
     {for(i=m;i>0;--i) $(a[i])=new_value 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])=v[i] OFS $(a[i])}1' file

在每列n1 <n2 <... <nm之后添加一列:(从背面开始)

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a)}
     {for(i=m;i>0;--i) $(a[i])=$(a[i]) OFS new_value}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