вот кое-что для начала. Я не знаю, как вы хотите добавить десятичное значение, поэтому вы делаете это сами
awk '/.*<p[ ]+begin=.*[ ]+end=.*/{
o=$0
gsub(/.*begin=\042|\042|>/,"")
m=split($0,s,"end=")
gsub(/[:;]/," ",s[1])
gsub(/[:;]/," ",s[2])
b=split(s[1],begin," ")
e=split(s[2],end," ")
# do date maths here
if (b>3){
tbegin=(begin[1]*3600) + (begin[2]*60) + begin[3] ##"."begin[4]
}else{
tbegin=(begin[1]*60) + begin[3] ##"."begin[4]
}
# add the decimal yourself
if(e>3) {
tend = (end[1]*3600) +(end[2]*60)+end[3]+ tbegin ##"."end[4]
}else{
tend = (end[1]*60)+end[3]+ tbegin ##"."end[4]
}
string=gensub("(.*begin=\042).*( end=\042)(.*)\042>", "\\1" tbegin "\042\\2" tend"\042>","g",o)
$0=string
}
{print}
' file
например
$ cat file
<p begin="00:06:28;12" end="00:00:02;26">
<p begin="00:08:45;12" end="00:00:23;26">
<p begin="08:45;12" end="00:2;26">
$ ./shell.sh
<p begin="388" end="390">
<p begin="525" end="548">
<p begin="492" end="518">
Если вы выполняете более сложные задачи, кроме этого, используйте парсер.