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