remark: This answer assumes that no CSV field entry has <double-quoted> strings ("string"
) with embedded <comma>- or <newline>-characters.
If the above is not applicable to you problem, other approaches are needed. Useful links:
If you want to add a column to a CSV file, you can do the following:
add a column at the beginning:
awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file
add a column at the end:
awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file
add a column before column n
:
awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file
add column after column n
:
awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file
add a column before each of column n1
< n2
< ... < nm
: (start at the back)
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
or for different values
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
add a column after each of column n1
< n2
< ... < nm
: (start at the back)
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
or for different values
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