使用awk / sed修改日期时间

时间:2015-11-04 17:04:30

标签: awk sed

我有一个包含一系列时间戳的日志文件。我需要以某种方式修改它。

日志文件:

['2015-11-04', '13:47:37:167']
['2015-11-04', '13:47:47:164']
['2015-11-04', '13:47:57:164']
['2015-11-04', '13:48:07:164']
['2015-11-04', '13:48:17:164']
['2015-11-04', '13:48:27:166']
['2015-11-04', '13:48:37:164']
['2015-11-04', '13:48:47:164']
['2015-11-04', '13:48:57:167']
['2015-11-04', '13:49:07:164']
['2015-11-04', '13:49:17:166']
['2015-11-04', '13:49:27:164']
['2015-11-04', '13:49:37:164']
['2015-11-04', '13:49:47:165']
['2015-11-04', '13:49:57:164']

这是我期望在每一行2015-11-04T13:49:57.164Z

中的示例输出

我怎样才能做到这一点?

Thakns。

6 个答案:

答案 0 :(得分:2)

由于需要转义引号,sed表达式不是很易读,所以可能使用双引号:

sed 's/\['\''\(.*\)'\'', '\''\(.*\):\(.*\)'\''\]/\1T\2.\3Z/'
sed "s/\['\(.*\)', '\(.*\):\(.*\)'\]/\1T\2.\3Z/"
如果你的sed支持它,那么

甚至可能-r

sed -r "s/\['(.*)', '(.*):(.*)'\]/\1T\2.\3Z/"

答案 1 :(得分:2)

提取子字符串,并创建新的时间戳:

perl -pe 'substr($_,0,30) = sprintf "%sT%s.%sZ", substr($_,2,10), substr($_,16,8), substr($_,25,3)' file

答案 2 :(得分:2)

 awk '{
  gsub(/[\\]\\[\\['"'"']/, "", $0)
  sub(/,/, "\\t", $0) 
  sub(/:/,"x",$2); sub(/:/,"x",$2); sub(/:/,".",$2)
  gsub(/x/,":",$2)
  print $1 "T" $2 "Z"}' logFile

<强>输出

2015-11-04T13:47:37.167Z
2015-11-04T13:47:47.164Z
2015-11-04T13:47:57.164Z
2015-11-04T13:48:07.164Z
2015-11-04T13:48:17.164Z
2015-11-04T13:48:27.166Z
2015-11-04T13:48:37.164Z
2015-11-04T13:48:47.164Z
2015-11-04T13:48:57.167Z
2015-11-04T13:49:07.164Z
2015-11-04T13:49:17.166Z
2015-11-04T13:49:27.164Z
2015-11-04T13:49:37.164Z
2015-11-04T13:49:47.165Z
2015-11-04T13:49:57.164Z

有点笨拙,但对于某些人来说,跟踪正在发生的事情可能会更容易一些。

IHTH

答案 3 :(得分:2)

如果您只是处理文字,以下内容可能就足够了。

awk -F'[^0-9:-]+' '{print $2"T"$3"Z"}'

当然,这并不能将最后一个冒号转换为点。为此,您可以强制它,相信您的时间格式不会发生变化:

awk -F'[^0-9:-]+' '{printf("%sT%s.%sZ\n",$2,substr($3,1,8),substr($3,10))}'

或者甚至可能:

awk -F'[^0-9-]+' '{printf("%sT%s:%s:%s.%sZ\n",$2,$3,$4,$5,$6)}'

答案 4 :(得分:2)

统称使用unix工具集可能比单个工具集更好。

tr -d "'[]," <log | tr ' ' 'T' | sed -r 's/:([0-9]{3})$/.\1Z/'

答案 5 :(得分:1)

sed 's@[^0-9]*\([0-9\-]*\)[^0-9]*\([0-9:]*\).*@\1T\2Z@;s/:/./3' file