2016-08-20 3 views
1

У меня есть mytext.txt файл, который имеет следующие в нем:Как интерпретировать длинную строку в формате csv?

2016-08-13 00:54:02,1471049642,62,28,16 2016-08-13 00:54:03,1471049643,62,28,20 2016-08-13 00:54:04,1471049644,62,28,18 2016-08-13 00:54:05,1471049645,62,28,18 2016-08-13 00:54:06,1471049646,62,28,19 2016-08-13 00:54:07,1471049647,62,28,17 2016-08-13 00:54:08,1471049648,62,28,19 2016-08-13 00:54:09,1471049649,62,28,16 2016-08-13 00:54:10,1471049650,62,28,19 2016-08-13 00:54:11,1471049651,62,28,18 

Я пытался сделать while петлю с BASH:

while IFS="," read -r f1 f2 f3 f4 f5 
do 
    echo -e "f1:$f1 f2:$f2 f3:$f3 f4:$f4 f5:$f5" 
done < mytext.txt 

, чтобы получить следующий вывод:

2016-08-13 00:54:02,1471049642,62,28,16 
2016-08-13 00:54:03,1471049643,62,28,20 
2016-08-13 00:54:04,1471049644,62,28,18 
2016-08-..... 

, но выход я получаю:

f1:2016-08-13 00:54:02 f2:1471049642 f3:62 f4:28 f5:16 2016-08-13 00:54:03,1471049643,62,28,20 2016-08-13 00:54:04,1471049644,62,28,18 2016-08-.... 

Где $f5 содержит остальную часть файла для чтения.

Как я могу это исправить?

ответ

2

Вы можете справиться с этим легко с sed заменой пространства до даты с новой строки:

sed -E $'s/ ([0-9]{4}-[0-9]{2}-[0-9]{2})/\\\n\\1/g' mytext.txt 

с гну СЭД:

sed -E 's/ ([0-9]{4}-[0-9]{2}-[0-9]{2})/\n\1/g' mytext.txt 

Выход:

2016-08-13 00:54:02,1471049642,62,28,16 
2016-08-13 00:54:03,1471049643,62,28,20 
2016-08-13 00:54:04,1471049644,62,28,18 
2016-08-13 00:54:05,1471049645,62,28,18 
2016-08-13 00:54:06,1471049646,62,28,19 
2016-08-13 00:54:07,1471049647,62,28,17 
2016-08-13 00:54:08,1471049648,62,28,19 
2016-08-13 00:54:09,1471049649,62,28,16 
2016-08-13 00:54:10,1471049650,62,28,19 
2016-08-13 00:54:11,1471049651,62,28,18 
+0

идеале я хочу чтобы вывести это в файл csv - это будет позже обрабатывается GNUPlot. ** Q: ** Как я могу нажать это в 'mycsvfile.csv'? – 3kstc

+1

's/([0-9 -] {10})/\ n \ 1/g' также будет работать для этого набора данных – Sundeep

+0

@ 3kstc: вы можете перенаправить вывод в файл csv:' sed -E '/([0-9] {4} - [0-9] {2} - [0-9] {2})/\ n \ 1/g 'mytext.txt> mycsvfile.csv' – anubhava