Tail -f 로그 파일을 실행할 때 Awk를 사용하여 Unix 타임스탬프를 사람이 읽을 수 있는 타임스탬프로 변환하는 방법은 무엇입니까?

Tail -f 로그 파일을 실행할 때 Awk를 사용하여 Unix 타임스탬프를 사람이 읽을 수 있는 타임스탬프로 변환하는 방법은 무엇입니까?

나는 현재 하나를 작업 중이고 tail -f mysql.log그것도 가지고 있습니다색상 코딩. 하지만 awk를 사용하여 유닉스 타임스탬프를 사람이 읽을 수 있는 형식으로 어떻게 변환할 수 있나요?

tail -f /var/lib/mysql/mysql-slow.log | awk '/User@Host:/ { $0 = "\033[32m" $0 "\033[39m" } /Query_time:/ { $0 = "\033[36m" $0 "\033[39m" } 1'

여기에 이미지 설명을 입력하세요.

답변1

gawk일반적으로 내장되지 않은 Linux 및 Cygwin의 경우인 GNU awk( )가 있는 경우 다음을 사용할 수 있습니다.strftime기능.

if (match($0, /^(.*timestamp=)([0-9]+)(.*)$/, parts)) {
    time = strftime("%F %T", parts[2]);
    $0 = parts[1] time parts[3];
}

BusyBox가 있는 임베디드 시스템에서는 awk의 더 제한된 버전이 있을 수 있지만 date변환을 수행할 수 있는 유틸리티가 있습니다.

if (match($0, /timestamp=[0-9]+/)) {
    system("date +'%F %T' -d " substr($0, RSTART+10, RLENGTH-10)) | getline time;
    $0 = substr($0, 1, RSTART) time substr($0, RSTART+RLENGTH);
}

POSIX 도구만 사용하면 사람이 읽을 수 있는 날짜와 Unix 타임스탬프를 직접 계산하는 것 외에는 변환할 수 있는 방법이 없습니다. (온라인에서 사용할 수 있는 쉘 및 awk 코드가 있다는 것을 알고 있지만 편리한 링크가 없습니다.) gawk, perl, python 등과 같은 더 나은 것이 설치되어 있는지 확인하는 것이 좋습니다.

답변2

색상 폐기 - 다음을 사용할 수 있습니다.

# | piped at the end 
awk -F'SET timestamp=' 'NF > 1{ system("date -d @" $2) }'

재설정과 동시에 색상을 제거하면 엔딩과 관련된 이스케이프 시퀀스를 제거하여 이를 제어/조정할 수 있을 것 같습니다.타임스탬프부분.

관련 정보