저는 BASH를 사용하여 파일(~/logs/Server_Info.log)에서 타임스탬프를 가져오는 스크립트를 만들고 있습니다. 특히 타임스탬프에서 시간을 추출하여 변수에 기록하고 싶습니다.
타임스탬프에 사용하는 형식은 다음과 같습니다.
date +"%b-%d-%Y-%I:%M:%S %p"
이 스크립트를 사용하여 데이터를 추출합니다.
#!/bin/bash
LAST_HOUR="$(( $(date +%I) - 1 ))"
SEARCH_STRING=$(date +"%b-%d-%Y-${LAST_HOUR}:")
timeval=$(grep "${SEARCH_STRING}" ~/logs/Server_Info.log)
echo "$timeval"
exit 0
그러나 이 스크립트를 실행할 때마다 다음 두 가지 답을 얻습니다.
블랭크 출력
-또는-
04
내 타임스탬프가 다음과 같기 때문에 이것은 완전히 잘못된 것입니다.
Mar-24-2017-05:07:00 PM
답변1
awk의 경우 다음과 같습니다.
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3
답변2
로그 파일에는 2017-03-15T08:00:23.698411Z 형식의 날짜 형식이 포함되어 있습니다. 이 시간이 UTC 형식인 경우(예: 2017-03-15T08:00:23.698411Z(시간과 날짜는 08:00:23 및 2017-03-15)) IST로 변환해야 합니다. 지난 한 시간 동안 다음 명령을 사용하십시오.
date -d '2017-03-15T08:00:23.698411Z last hours' -u +%s
1489561223
date -d @1489561223 +"%Y/%m/%d-%H:%M:%S"
2017/03/15-07:00:23
2시간 전으로 돌아가려면 '지난 시간' 대신 '2시간 전'을 사용하세요.
참고:- Linux 서버에서 위 명령을 실행 중이며 Linux 서버 타이밍은 UTC입니다. IST Linux 서버에서 위 명령을 실행하려면 5시간 30분을 더 추가해야 합니다(예: "지난 시간" 대신 "6시간 30분 전").