나는 현재 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) }'
재설정과 함께 색상을 인라인으로 제거하면 더 어려워집니다. 나는 당신이타임스탬프부분.