我想重新格式化我的数据以填充数据库。
这是我要重新格式化的9GB 60列CSV文件的示例。
DATE,TIME,CRSPTM1,CRSPME1,CRSPLC1,CRSPMI1,CRSPSC1,CRSPMC1,CRSPSX1,CRSPTMT
20140303,9:30:00,1407.02,1394.69,1399.76,1426.59,1444.68,1498.23,1460.91,1495.53
20140303,9:30:01,1403.34,1391.57,1396.47,1422.47,1439.05,1488.27,1454.67,1491.61
20140303,9:30:02,1402.23,1390.97,1395.69,1420.78,1435.81,1486.59,1451.49,1490.43
20140303,9:30:03,1402.23,1391.01,1395.72,1420.72,1435.65,1486.62,1451.37,1490.43
20140303,9:30:04,1402.31,1391.15,1395.83,1420.70,1435.57,1486.63,1451.28,1490.52
20140303,9:30:05,1402.13,1390.95,1395.64,1420.58,1435.42,1486.56,1451.10,1490.33
20140303,9:30:06,1402.00,1390.84,1395.50,1420.29,1435.32,1486.58,1450.99,1490.18
20140303,9:30:07,1401.96,1390.83,1395.47,1420.15,1435.24,1486.47,1450.91,1490.14
20140303,9:30:08,1401.75,1390.55,1395.24,1420.17,1435.11,1486.27,1450.76,1489.92
前两个字段是,例如,20140303,9:30:00
,我需要将其更改为MySQL DateTime格式
DATETIME类型用于包含日期和时间部分的值。 MySQL以'YYYY-MM-DD HH:MM:SS'格式检索并显示DATETIME值。
我在几个帖子上看到Perl有一个DateTime
模块,并希望使用它。
这里不需要DateTime
模块。这是简单的文本重新格式化
perl -pe 's/^(\d\d\d\d)(\d\d)(\d\d),/$1-$2-$3 /' myfile.csv
在我看来,你实际上需要改变每一行的前8个字符(但第一个)。您需要在年份部分(4个字符)和月份部分(另外2个字符)之后插入-
字符。
假设您的输入文件是inp.txt,您可以使用以下单行脚本:
perl –lne "print s/^(\d{4})(\d{2})(\d{2})/$1-$2-$3/r" inp.txt
为了避免创建任何额外的变量,我使用了非破坏性(-r)选项的替换,因此s/.../.../
指令的结果是替换结果(不是替换的数量)。
第一行(列名称)将不会更改,因为它与使用的正则表达式不匹配。
如果要将结果存储在另一个文件中,请将>out_file.txt
添加到上述命令中。
如果有些事情仍然不清楚,你可能应该阅读一下: