1. 时间显示格式: 2018-12-20 18:00:15
转换为UNIX时间戳: date -d '2018-12-20 18:00:15' +%s
输出:1545300015
2. UNIX时间戳: 1545300015
不指定转换格式:date -d @1545300015
输出:Thu Dec 20 18:00:15 CST 2018
转换为指定时间格式:date -d @1545300015 +'%Y-%m-%d %H:%M:%S'
输出: 2018-12-20 18:00:15
3. awk 命令转换(适用于多文本内容)
a.单列:gensub格式化log文本中的第1列时间,打印出第1列和对应的转换后的UNIX时间戳
cat log |awk '{t=gensub(/(..)/,"\\1 ","g",$1);sub(" ","",t); print "源格式="$1" UNIX格式="mktime(t)}'
或
cat log |awk '{t=gensub(/(....)(..)(..)(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","", $1); print "源格式="$1" UNIX格式="mktime(t)}'
输出:
源格式=20190228180015 UNIX格式=1551348015
源格式=20190228183020 UNIX格式=1551349820
b.多列: gensub格式化log文本中的第1、2列时间,打印出第1、2列和对应的转换后的UNIX时间戳
cat log |awk '{t=gensub(/(..)/,"\\1 ","g",$1);p=gensub(/(..)/,"\\1 ","g",$2);sub(" ","",t);sub(" ","",p); print "src="$1" dest="mktime(t)"|src="$2" dest="mktime(p)}'
或
cat log |awk '{t=gensub(/(....)(..)(..)(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","", $1); p=gensub(/(....)(..)(..)(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","", $2); print "src="$1" dest="mktime(t)"|src="$2" dest="mktime(p)}'
输出:
src=20190228180015 dest=1551348015 | src=20190228181023 dest=1551348623
src=20190228183020 dest=1551349820 | src=20190228190312 dest=1551351792
注:log文本内时间格式必须为20190228180015 (年月日时分秒)
4. awk命令转换UNIX格式为指定格式(适用于多文本内容)
a. log文本内UNIX时间为1545300015(秒级十位数)
cat log |awk '{print "源格式="$1, " 指定格式="strftime("%Y%m%d%H%M%S",$1) }'
输出:
源格式=1545300015 指定格式=20181220180015
b. log文本内UNIX时间为1545300015123(毫秒级),UNIX时间除以1000
cat log |awk '{print "源格式="$1, " 指定格式="strftime("%Y%m%d%H%M%S",$1/1000) }'
输出:
源格式=1545300015123 指定格式=20181220180015