- 論壇徽章:
- 0
|
寫了一個很繁的
思路是找到每個時間的匹配,然后根據(jù)時間的格式,把它轉(zhuǎn)換成毫秒,然后*1.5,最后再轉(zhuǎn)換成時間的格式,并替換。
/([0-2][0-9] ?[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]/ 這是判斷時間的正則表達(dá)式,為了簡化,小時部分不是太準(zhǔn)確。
這段代碼只能在gawk中運行,因為使用了gawk的擴展函數(shù)
- /([0-2][0-9]:)?[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]/{
- ns=""
- while(match($0,/([0-2][0-9]:)?[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]/)){
- t=substr($0,RSTART,RLENGTH)
- if(RLENGTH==9) t="00:"t
- split(t,a,"[:.]")
- h=a[1];m=a[2];s=a[3];ms=a[4]
- ms +=mktime(sprintf("1970 1 1 %d %d %d",h,m,s))*1000
- ms =sprintf("%.0f",ms*1.5)
- t=(RLENGTH==12)?strftime("%H:%M:%S",(ms-ms%1000)/1000):strftime("%M:%S",(ms-ms%1000)/1000)
- ms %= 1000
- ns=ns substr($0,1,RSTART-1) t "." ms
- $0=substr($0,RSTART+RLENGTH)
- }
- $0=ns
- }
- {print $0}
復(fù)制代碼 |
|