에포크 시간을 사람이 읽을 수 있는 형식으로 변환하는 스크립트

에포크 시간을 사람이 읽을 수 있는 형식으로 변환하는 스크립트

여러 줄이 포함된 파일이 있습니다. 일부 행은 날짜와 시간을 나타내지만 시간은 에포크 형식입니다. 일부 명령을 사용해 보았지만 해당 명령은 모든 숫자를 변환합니다. 해당 내용만 변환하고 싶습니다. 동일한 파일은 다음과 같습니다.

고양이 서식
================================================= = ===========
0='917598936722' 395='1529313008' 391='0' 165='0' 142='0' 131='보류 상태'
================================================= = ===========

0='917598936722':MSISDN  
131='상태_보류':PROMO_TP3_STATUS  
142='0':USAGE_COUNT_3_STATUS  
165='0':EBUCKET_USAGE_TS_3  
391='0':PROM_3_END_TIMESTAMP  
395='1529313008':날짜_TC1  
396화

Date_TC1에 있는 행과 에포크 시간을 변환해야 합니다 TC2. 이와 유사하게 더 많은 행이 있지만 어느 것이 epoch 날짜/시간을 나타내는지 알 수 없습니다. 그러나 해당 날짜/시간이 epoch 형식으로 존재하는 경우 사람이 읽을 수 있는 형식으로 변환해야 합니다.

답변1

cat conv.awk

/Date_TC1/||/TC2/   {
    split($0, r, "'")
    print(r[1], strftime("%c", r[2]), r[3], r[4])
    next
    }

{ print }

awk -f conv.awk src.txt
=============================================================
0='917598936722' 395='1529313008' 391='0' 165='0' 142='0' 131='Status_Pending'
=============================================================

0='917598936722'    :MSISDN  
131='Status_Pending':PROMO_TP3_STATUS  
142='0'             :USAGE_COUNT_3_STATUS  
165='0'             :EBUCKET_USAGE_TS_3  
391='0'             :PROM_3_END_TIMESTAMP  
395= Mon 18 Jun 2018 11:10:08 AM CEST     :Date_TC1   
396== Mon 18 Jun 2018 11:10:08 AM CEST    :TC2 

답변2

사용암소 비슷한 일종의 영양sed, 이 시도:

sed -re 's/([0-1][0-6][0-9]{8})/$(date -d @&)/g;
         /date -d/ s/\x27/\\\x27/g;
         /date -d/ s/\$[^(]/\\$\(/g;
         /date -d/ s/.*/echo &/e' FORMATTED

설명하다:

  • s/([0-1][0-6][0-9]{8})/$(date -d @&)/g:모든 타임스탬프(첫 번째 숫자가 00 - 16인 10자리)를 다음으로 바꿉니다.$(date -d @<timestamp>)

  • /date -d/date -d: 해당 줄(=이전 단계에서 변경한 줄)에 있는 경우에만 다음 명령을 실행합니다.

  • s/\x27/\\\x27/g: 그 사이에 있는 모든 항목이 있도록 all을 '다음으로 바꿉니다.\'~ 할 것이다마지막 단계에서 설명해주세요.

  • s/\$[^(]/\\$\(/g;$: 마지막 단계에서 변수로 해석되지 않도록 뒤에 오지 않는 모든 항목을 바꿉니다.(\$

  • s/.*/echo &/;e: 전체 라인에서 ( e) 및 ( )를 실행합니다.echo.*

eval참고: 이는 "do_something_evil"과 같이 원본 파일의 모든 항목을 실행하는 것과 유사합니다.

(통과하다)

관련 정보