2011-02-23 6 views
2

ウェブサイトから多くのテキストファイルをダウンロードする必要があります。それから私は、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は当然の年です)。
どうすればいいですか?

+1

現在時刻が1月1日00:00かそれに近い時に何をしたいですか?ちょうど終わった年、または今始まった年を仮定すべきか? –

+0

は関係ありません。それは重要ではない。 – emanuele

答えて

0

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'

1
year=`date +%Y` 
sed "s|^\([0-9][0-9]/[0-9][0-9]\) |\1/$year |" filename 
2
#!/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

これらの未使用の一時変数は必要ありません。my $ year =(localtime)[5] + 1900; – tadmc

+1

コア[Time :: Piece](http://search.cpan.org/perldoc?Time::Piece)モジュールを使用して、ローカルタイム処理を簡素化できます。また、置き換えでは、一般的な空白と一致し、スペースで置き換えます。 – bvr

+0

私は上記の提案を取り入れるために私の答えを編集しました。ありがとう@ tadmcと@ bvr。私はTime :: Pieceについて知らなかった。 – d5e5

0
$ 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 
2

少しgolfy Perlの溶液:

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