按编号重新排序CSV文件中的列

时间:2013-07-01 20:47:14

标签: regex bash csv sed awk

我正在尝试用倒数第二列替换第二列,并删除最后三列。例如,我有这个sample.csv

1,2,3,4,5,6
a,b,c,d,e,f
g,h,i,j,k,l

我想输出:

1,5,3
a,e,c
g,k,i

我正在使用此命令:

awk 'BEGIN{FS=OFS=","} {$2=$(NF-1); NF=NF-3}'1 sample.csv

在excel中查看csv文件时效果很好。但是,当我在记事本中查看.csv文件时,我注意到一行中的最后一项连接到下一行中的第一项。所以我得到了

1,5,3a,e,cg,k,i

任何人都可以给我任何关于如何解决问题的建议,这样我就可以让.csv文件为每一行创建一个新的段落,如所需的输出?感谢。

2 个答案:

答案 0 :(得分:5)

将回车符(\r)添加到每行的末尾应该有帮助:

awk 'BEGIN{FS=OFS=","} {$2=$(NF-1); NF=NF-3;sub(/$/,"\r");}'1 sample.csv 

答案 1 :(得分:2)

GNU代码

sed -r 's/(\w,)\w,(\w,)\w,(\w,)\w/\1\3\2/' file

$cat file
1,2,3,4,5,6
a,b,c,d,e,f
g,h,i,j,k,l

$sed -r 's/(\w,)\w,(\w),\w,(\w,)\w/\1\3\2/' file
1,5,3
a,e,c
g,k,i