Tail -f 로그 파일을 수행할 때 Awk를 사용하여 Unix 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하려면 어떻게 해야 합니까?

Tail -f 로그 파일을 수행할 때 Awk를 사용하여 Unix 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하려면 어떻게 해야 합니까?

나는 현재 a를 하고 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) }'

재설정과 함께 색상을 인라인으로 제거하면 더 어려워집니다. 나는 당신이타임스탬프부분.

관련 정보