2013-07-01 23 views
4

我试图用倒数第二列替换第二列,并删除最后三列。例如,我有这样的sample.csv通过编号重新排列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 

,当我查看该CSV文件的工作完美在Excel中。但是,当我查看记事本中的.csv文件时,我注意到一行中的最后一项连接到下一行中的第一项。所以我得到

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

谁能给我如何来解决这个问题,所以我可以.csv文件有像期望的输出每行一个新的段落有什么建议?谢谢。

+0

如果这可以帮助,我知道每行都有相同数量的列。所以在样本中,每行总是有三个项目。 – user2525881

+1

你怎么样不使用记事本,而是一个真正的文本编辑器呢? –

回答

5

添加一个回车(\r)到每一行的结尾应该有所帮助:

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

谢谢!完美的作品 – user2525881

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