Как я могу добавить подразумеваемый год к строке, в которой не указан год? - PullRequest
2 голосов
/ 23 февраля 2011

Мне нужно загрузить много текстовых файлов с веб-сайта.Затем я должен поместить его в базу данных 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 (где yyyy - текущий год, конечно) перед тем, как поместить его в базу данных.
Какя могу сделать это?

Ответы [ 5 ]

2 голосов
/ 24 февраля 2011

Небольшое решение для игры в гольф:

perl -MTime::Piece -pe '$yy=localtime->year; s{^(\d{2}/\d{2})(\s)}{$1/$yy$2}' input
2 голосов
/ 24 февраля 2011
#!/usr/bin/perl
use strict;
use warnings;
use Time::Piece;

my $pattern = qr(^(\d\d/\d\d) );#month/day at start of line followed by space
my $year = localtime->year;

while (<DATA>){
    s/$pattern/$1\/$year /;
    print;
}
__DATA__
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
1 голос
/ 24 февраля 2011
year=`date +%Y`
sed "s|^\([0-9][0-9]/[0-9][0-9]\) |\1/$year |" filename
0 голосов
/ 24 февраля 2011
$ 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
0 голосов
/ 24 февраля 2011

awk -v year=$(date +%Y) 'match($1, "^[0-9][0-9]/[0-9][0-9]$") {$1 = $1"/"year} 1'

или

awk -v year=$(date +%Y) 'split($1, a, "/") == 2 {$1 = $1"/"year} 1'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...