格式化日期字段

问题描述 投票:-3回答:2

我想重新格式化我的数据以填充数据库。

这是我要重新格式化的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模块,并希望使用它。

perl datetime
2个回答
2
投票

这里不需要DateTime模块。这是简单的文本重新格式化

perl -pe 's/^(\d\d\d\d)(\d\d)(\d\d),/$1-$2-$3 /' myfile.csv

-1
投票

在我看来,你实际上需要改变每一行的前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添加到上述命令中。

如果有些事情仍然不清楚,你可能应该阅读一下:

  • perl选项(至少在这里使用的那些),
  • perl one-liners,
  • 常用表达。
© www.soinside.com 2019 - 2024. All rights reserved.