$ awk 'BEGIN{FS=OFS="##";t=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",a," ");for(n=1;n<=t;n++)a[a[n]]=n;a["PM"]=12}{for(n=1;n<=NF;n++)if(match($n,/(...) ([0-9]+) +([0-9]+) +([0-9]+):([0-9]+):([0-9]+):...([AP]M)/,m))$n=sprintf("%d-%02d-%02d %02d:%02d:%02d",m[3],a[m[1]],m[2],m[4]+a[m[7]],m[5],m[6])}1' FILE
1##5667##2013-01-02 22:29:41##2013-01-02 22:29:41##rtyr##中國
2##ewrer##2016-04-17 10:29:41##2013-01-02 22:29:41##rty##埃及
您好,您哪個腳本在轉(zhuǎn)換日期是單個值且前面有兩個空格(例如3日它不是表示成“ 03”,而是表示成了“ 3”)或者小時是單個值且前面有兩個空格(例如2點(diǎn)它不是表示成“ 02”,而是表示成了“ 2”)時會報(bào)錯如下:
awk: cmd. line:19: (FILENAME=x2 FNR=1) fatal: strftime: second argument less than 0 or too big for time_t
$ awk 'BEGIN{FS=OFS="##";t=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",a," ");for(n=1;n<=t;n++)a[a[n]]=n;a["PM"]=12}{for(n=1;n<=NF;n++)if(match($n,/^(...) +([0-9]+) +([0-9]+) +([0-9]+):([0-9]+):([0-9]+):...([AP]M)/,m))$n=sprintf("%d-%02d-%02d %02d:%02d:%02d",m[3],a[m[1]],m[2],m[4]+a[m[7]],m[5],m[6])}1' x2 > x3