Предполагая, что любой двузначный год между 70 и 99 происходит в прошлом веке:
sed 's/[7-9][0-9];$/19&/; s/[0-6][0-9];$/20&/' file
Или пусть кто-то другой решит:
perl -MTime::Piece -F';' -ane '
$F[-2] = Time::Piece->strptime($F[-2], "%d.%m.%y")->strftime("%d.%m.%Y");
print join(";", @F)
' file
Опции
-MTime::Piece
импортирует стандартный модуль Perl Time::Piece
-F';' -a
опции разделяют каждую строку точкой с запятой и сохраняют результат в массиве @F
-n
циклически перебирает строки во входных данных (stdin или файлы) без автоматической печати каждой строки.
Код
$F[-2]
является вторым последним полем (где дата была в вашем исходном вопросе).
- Я использую методы
strptime
и strftime
для разбора и форматирования даты.
Итак, если у вас есть даты, которые должны быть изменены в столбцах с 12 по 15, используйте
perl -MTime::Piece -F';' -ane '
sub reformat {
return Time::Piece->strptime(shift, "%d.%m.%y")->strftime("%d.%m.%Y");
}
for my $i (11..14) {
$F[$i] = reformat $F[$i];
}
print join(";", @F)
' file