Mysql 如何向未指定年份的字符串中添加隐含年份?

Mysql 如何向未指定年份的字符串中添加隐含年份?,mysql,perl,sed,awk,Mysql,Perl,Sed,Awk,我必须从网站上下载很多文本文件。然后我必须将其放入MySQL数据库,但该文件有以下行: 02/04 15:00 Some strings 03/03 15:00 other strings 01/12/2010 12:00 other strings 03/04 15:00 more strings ... 如果没有明确写明年份,则表示该年份为当前年份。因此,我需要逐行解析文件,并将表单dd/mm的每个日期转换为表单dd/mm/yyyy的日期,其中yyy当然是当前年份,然后再将其放入数

我必须从网站上下载很多文本文件。然后我必须将其放入MySQL数据库,但该文件有以下行:

02/04 15:00 Some strings

03/03 15:00 other strings

01/12/2010 12:00 other strings

03/04 15:00 more strings

...
如果没有明确写明年份,则表示该年份为当前年份。因此,我需要逐行解析文件,并将表单dd/mm的每个日期转换为表单dd/mm/yyyy的日期,其中yyy当然是当前年份,然后再将其放入数据库。 我该怎么做?

awk-v year=$date+%Y'匹配$1,^[0-9][0-9]/[0-9][0-9]${$1=$1/年}1'

year=`date +%Y`
sed "s|^\([0-9][0-9]/[0-9][0-9]\) |\1/$year |" filename


awk-v year=$date+%Y'拆分$1,a,/==2{$1=$1/年}1'

一个小高尔菲perl解决方案:

perl -MTime::Piece -pe '$yy=localtime->year; s{^(\d{2}/\d{2})(\s)}{$1/$yy$2}' input

当当前时间为1月1日00:00或接近该时间时,您希望发生什么?它应该假设刚结束的那一年还是刚开始的那一年?没关系。这并不重要,不需要所有未使用的临时变量:my$year=localtime[5]+1900;您可以使用核心模块简化本地时间处理。同样在替换中,您匹配一般空格并替换为空格。我编辑了我的答案,以纳入上述建议。谢谢@tadmc和@bvr。我不知道时间。
$ awk 'BEGIN{y=strftime("%Y")}length($1)==5{$1=$1"/"y}1' file
02/04/2011 15:00 Some strings
03/03/2011 15:00 other strings
01/12/2010 12:00 other strings
03/04/2011 15:00 more strings

$ ruby -ane '$F[0].size==5 && $F[0]=$F[0]+"/"+Time.now.year.to_s;puts $F.join(" ")' file
perl -MTime::Piece -pe '$yy=localtime->year; s{^(\d{2}/\d{2})(\s)}{$1/$yy$2}' input