Как интерпретировать длинную строку в формате CSV?

bash export-to-csv

31 просмотра

1 ответ

У меня есть 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 

Я попытался сделать 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хранится остаток прочитанного файла.

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

Автор: 3kstc Источник Размещён: 08.11.2019 11:27

Ответы (1)


2 плюса

Решение

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

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

с GNU SED:

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
Автор: anubhava Размещён: 20.08.2016 02:58
Вопросы из категории :
32x32