我有一个CSV文件。例如列:
col1, col2, col3, col4, col5
我需要将其重组为
col1, col2, new_col1, col3, new_col2, col4, new_col3, col5.
行中的值将为null。我假设必须使用awk。
我已经尝试了StackOverflow中的问题,但是我得到的只是在结尾或开头添加。我需要能够指定需要添加列名的列号/位置。
答案 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"
)且带有嵌入的<逗号>-或
如果以上内容不适用于您的问题,则需要其他方法。有用的链接:
如果要将列添加到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