다음 기능을 제공하는 쉘 스크립트를 구현하십시오.
입력으로 로그 파일이 필요합니다. 로그 파일에는 측면에 표시된 메시지 표시가 있는 로그 문이 포함되어 있습니다.
이 유틸리티는 지정된 시간보다 오래 걸리는 모든 작업을 나열합니다. 시간은 명령줄에서 초 단위로 지정됩니다.
입력 로그 파일 예:
#<process id> <date time> <log level> <file name> <line number> <actual message>
1098 2007-02-28 15:23:09 WARN db_util.c 5928 Config file not found, using default values
1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:17 INFO db_util.c 5908 Connected to database
1098 2007-02-28 15:23:17 ERROR log_test.c 198 Unable to setup our satellite launch system
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite
1098 2007-02-28 15:23:21 INFO log_test.c 198 Reconnected. Initialize to launch the satellite.
예: 위 파일을 입력으로 사용하고 성능 임계 시간을 2초로 하여 유틸리티를 실행하면 다음과 같은 출력이 생성됩니다.
예제 출력:
1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite
내가 지금까지 시도한 것 :
awk -F' ' '! /#.*$/ {print $3}' $1 | awk 'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\" +%s"|getline d; print $1,$2,d}' $1
입력 로그 파일에서 시간 열을 읽고 Unix 타임스탬프로 변환합니다.
답변1
실제로 날짜를 다시 코딩할 필요는 없다고 생각합니다.
awk '{split($3, p, /:/); if (prev && (prev + 2) % 60 <= p[3]) {
print line}; prev=p[3]; line=$0}' logfile