로그에서 밀리초 단위의 신기원 시간을 찾아 사람이 읽을 수 있는 시간으로 바꿉니다.

로그에서 밀리초 단위의 신기원 시간을 찾아 사람이 읽을 수 있는 시간으로 바꿉니다.

모든 에포크 시간을 찾아서 사람이 읽을 수 있는 시간(밀리초)으로 바꾸고 싶습니다. 예를 들어 신기원 시간이 첫 번째 열에 있지만 무작위로 13자리를 검색하여 "23:59:59 01.01.1980"과 같은 시간으로 바꾸는 대신 이 작업을 수행하는 방법에 대한 해결책을 찾았습니다. Linux 시스템에서 수행됩니다.

따라서 시대는 다음과 같이 보일 수 있습니다.

sms address="+********" body="샘플 텍스트입니다.

답변1

나는 다음을 사용할 것이다 perl:

perl -MPOSIX -pe 's{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
                  strftime "%FT%T.$2%z",localtime$1}ge' < your-file

이는 0이 아닌 숫자로 시작하고 이 숫자를 초과하지 않는 13자리 시퀀스와 일치하므로 타임스탬프가 2001-09-09T01:46:40.000+0000 - 2286-11-20T17:46:39.999+ 범위에 있다고 가정합니다. 0000 표준 형식을 지웁니다 ( 원하는 대로 형식을 조정할 2021-05-03T15:47:59.300+0100수 있음 ).strftime()

여전히 타임스탬프에 포함되지 않은 숫자의 형식을 다시 지정하는 경우, 1년 전부터 지금까지와 같이 특정 범위 내의 숫자 형식만 다시 지정하여 오탐의 위험을 줄일 수 있습니다.

perl -MPOSIX -pe '
  BEGIN{$start = ($end = time) - 366*24*60*60}
  s{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
    $start <= $1 && $1 <= $end ?
      strftime "%FT%T.$2%z",localtime$1 :
      $&
   }ge' < your-file

관련 정보