나는 현재 하나를 작업 중이고 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) }'
재설정과 동시에 색상을 제거하면 엔딩과 관련된 이스케이프 시퀀스를 제거하여 이를 제어/조정할 수 있을 것 같습니다.타임스탬프부분.