格式化日期字段

时间:2018-01-01 11:05:40

标签: perl datetime

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

正如我所看到的,你实际上需要改变每一行的前8个字符(但是 第一)。您需要在年度部分(4个字符)和月份之后插入<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="style/style.css"> <title>Hacene Nasseur Portfolio</title> </head> <body> <style> .container-fluid { min-height: 100%; background: #f9f9f9; } #navbar { overflow: hidden; background-color: #c2d6c7; font-family: consolas; } #navbar a { float: left; display: block; text-align: center; text-decoration: none; } .pimg1 { min-height: 100%; background-image: url('https://startuplab.io/images/webdev-roadmap-2-html-js-css.jpeg'); } </style> <nav class="navbar navbar-default"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#">Hacene Nasseur Portfolio</a> </div> <ul class="nav navbar-nav"> <li class="active"><a href="index.html">Home</a></li> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> </ul> </div> </nav> <script src="css/bootstrap.min.js"></script> </body> </html> 个字符 部分(另外2个字符)。

假设您的输入文件是 inp.txt ,您可以使用以下单行脚本:

-

为了避免创建任何额外的变量,我使用了替换 非破坏性 -r )选项,因此perl –lne "print s/^(\d{4})(\d{2})(\d{2})/$1-$2-$3/r" inp.txt 指令的结果 是替换结果(不是替换的数量)。

第一行(列名)不会更改,因为它不匹配 使用正则表达式。

如果要将结果存储在另一个文件中,请将s/.../.../添加到上述命令中。

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

  • perl 选项(至少这里使用的那些),
  • perl one-liners,
  • 正则表达式。