如何将长字符串解释为 csv 格式?
How to interpret a long string into a csv format?
我有一个 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
我尝试用 BASH 做一个 while
循环 :
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
包含读取文件的其余部分。
我该如何补救?
您可以使用 sed
轻松处理此问题,方法是将日期前的 space 替换为换行符:
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/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
我有一个 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
我尝试用 BASH 做一个 while
循环 :
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
包含读取文件的其余部分。
我该如何补救?
您可以使用 sed
轻松处理此问题,方法是将日期前的 space 替换为换行符:
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/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