awk/grep을 사용하여 첫 번째 열에 Unix 타임스탬프가 포함된 텍스트 파일을 보고 싶습니다. 볼 때 사람이 읽을 수 있는 시간으로 어떻게 변환합니까?
답변1
행이 Unix 타임스탬프로 시작하는 경우 다음을 수행해야 합니다.
perl -pe 's/^(\d+)/localtime $1/e' inputfilename
perl -p
각 입력 줄에 대해 실행되는 전달된 표현식에 대해 루프를 호출하여 -e
루프 끝에 버퍼를 인쇄합니다.
이 표현식은 substition 명령을 사용하여 s///
각 줄의 시작 부분에 있는 일련의 숫자를 일치 및 캡처하고 이를 Unix 타임스탬프로 해석되는 해당 숫자의 현지 시간 표현으로 바꿉니다. /e
대체 패턴이 표현식으로 평가됨을 나타냅니다.
답변2
AWK가 다음과 같은 경우멍청한, 당신은 그것을 사용할 수 있습니다 strftime
:
gawk '{ print strftime("%c", $1) }'
첫 번째 열의 타임스탬프를 현재 로케일의 기본 날짜/시간 표현으로 변환합니다.
이를 사용하여 콘텐츠를 보기 전에 변환할 수 있습니다.
gawk '{ print gensub($1, strftime("%c", $1), 1) }' inputfile
답변3
"날짜"를 사용하세요
이를 위해 Perl, awk, php 또는 긴 산술 표현식이 필요하지 않습니다. gnu "date"를 사용하여 이 작업을 수행할 수 있는데, 이는 이런 종류의 작업에 정말 유용합니다. "date"의 다른 버전의 경우 YMMV입니다.
$ date -d '1/1/1970 GMT 1571889039 seconds'
Wed Oct 23 20:50:39 PDT 2019
여기서 일어나는 일은 시간을 지정하고 조정하는 것입니다. 시간은 유닉스 시대인 1970년 1월 1일 자정(GMT)입니다. (자정은 명시적으로 주어지지 않으며, 하루 중 시간을 생략할 때마다 암시적으로 사용됩니다.)
시간에 1571889039초의 조정 값을 추가합니다. 분명히 타임 스탬프를 사용하십시오. 설명서에서는 이 기능을 설명하기 위해 "상대적"이라는 단어를 사용합니다.
최신 버전의 GNU Date에 대해 맨페이지의 예제로만 문서화된 더 깔끔한 버전이 있습니다.
$ date -d @2147483647
Mon Jan 18 19:14:07 PST 2038
날짜를 자주 조작해야 하는 경우 날짜 명령을 알아 두십시오. 그것은 단순한 시계가 아닙니다. 이는 쉘의 날짜/시간 라이브러리입니다.
답변4
휴대용 버전의 경우 최악의 시나리오를 직접 계산할 수 있습니다. Unix 타임스탬프는 다음에 정의되어 있습니다.POSIX XBD 에포크 이후 4.16초:
tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 + (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 - ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400
이는 원하는 매핑의 반대이므로 이를 되돌리려면 약간 의 작업이 필요합니다. 이렇게 하면 "POSIX UTC"가 분해되지만 현재 시간대로 형식을 지정하는 방법이 필요할 수 있습니다. 이식성 이 date -d
없는 것 같아서 이를 수행할 수 있는 좋은 방법이 있는지 확실하지 않습니다.
* 좋아요, 그건 절제된 표현일 수도 있습니다.