2016-08-20 10 views
1

私はその中に次のことを持っているmytext.txtファイルがあります:次のような出力を得るために長い文字列をcsv形式に変換するにはどうすればよいですか?

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 

::私はBASHとwhileループを行うことを試みている

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 

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をGNUと

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

関連する問題