solarflux, така няма да стане с такова сумиране на числата. Ако часът е 19:30, с такова сумиране ще стане 110:30. Това може да се избегне, като се понаместят обхватите на substr функциите, но това не решава другият проблем - преминаване към следваща дата, когато часът надхвърли 23:59.
martos, ще ти свърши ли работа такъв ред
GeSHi (Bash):
awk 'BEGIN { FS = "\""; OFS="\""}; { for (i=4; i<=NF; i++) { if($i ~ /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/) { split($i, a, ""); $i = strftime("%Y%m%d%H%M%S +0200", mktime(a[1]a[2]a[3]a[4]" "a[5]a[6]" "a[7]a[8]" "a[9]a[10]" "a[11]a[12]" "a[13]a[14])+3600); };}; print}' име_на_файла
Ако часовата разлика не трябва да е статично забита, а трябва да е текущата часова разлика, която използва системата, замени "+0200" с "%z". Във for-а тръгвам от "i=4", тъй като първото срещане на число за промяна в реда е на 4-то място, вземайки се предвид кавичките за разделител. Може да го намалиш, ако в цялостния XML файл ще имаш срещания и на по-предни места. Освен това, скриптът ще заменя всички стрингове, състоящи се само от цифри и дълги 14 символа. Ако в XML файла ще имаш и други стрингове, състоящи се само от цифри и дълги 14 символа, които не трябва да бъдат заменяни, ще имаш проблем.
В if-а би било по-добре да се напише [0-9]{14}, вместо тази дълга поредица от 14 отделни диапазона, обаче нещо не успях да накарам awk да реагира на такъв указател. Може да се ползва [0-9]+ за по-кратко, но така се рискува прихващане и на други стрингове, състоящи се само от цифри, които не са с дължина 14 символа.
П.П.: А, да! Ако ти даде грешка за strftime, инсталирай си gawk - функцията пристига с него, но след това можеш да си я ползваш и в awk.