2017-03-07 64 views
1

我刚刚将一些数据捕获到一个CSV文件中,但逗号不见了。根据数据的性质,它看起来是一个非常简单的工作,可以将它们添加回使用正确的工具。如何在文件中插入逗号使其成为CSV?

我有一种感觉,awk,sed,cut或类似可能是有用的,但我不完全确定如何最好地应用它们。

下面是数据的一个片段:

17-03-07 20:45:56.400-1.0040.00 
17-03-07 20:45:56.5003.1040.00 
17-03-07 20:45:56.6002612.0039.50 
17-03-07 20:45:56.7002611.0839.00 

这里是它应该是什么样子:

17-03-07 20:45:56.400,-1.00,40.00 
17-03-07 20:45:56.500,3.10,40.00 
17-03-07 20:45:56.600,2612.00,39.50 
17-03-07 20:45:56.700,2611.08,39.00 

参与的规则很简单:

  • 有三列
  • 在字符21之后加上一个逗号(小数点后第三位)的秒CE)
  • 每行(只有中间柱的端部前5个字符添加逗号的长度是可变

但如何最好地为线的1000个自动化的?

回答

1

使用具有特定的正则表达式模式sed流编辑器中的溶液:

sed -Ei 's/^(.{21})(.+)(.{6})$/\1,\2,\3/' testfile 

选项:

-E选项,允许扩展正则表达式

-i选项,允许修改(进行替换)文件到位


正则表达式模式成分:

(.{21}) - 为对前21个字符

(.+)第一捕获组 - 用于可变长度的中间列中的第二捕获组

(.{6}) - 最后一列5个字符的第三个捕获组

+1

@EdMorton,ok,编辑 – RomanPerekhrest

1

awk来救援!

awk ' {a[1]=0; a[2]=21; a[3]=length($0)-5; 
     for(i=1;i<length(a);i++) printf "%s,",substr($0,a[i]+1,a[i+1]-a[i]); 
     printf "%s\n",substr($0,a[i]+1)}' file 

可以通过向数组a添加点来扩展到更多的断点。

0
awk '{sub(/00/,"00,")sub(/.{5}$/,",&")}1' file 

17-03-07 20:45:56.400,-1.00,40.00 
17-03-07 20:45:56.500,3.10,40.00 
17-03-07 20:45:56.600,2612.00,39.50 
17-03-07 20:45:56.700,2611.08,39.00