날짜, 시간(시, 분, 초, 밀리초), 차량 속도, 차량과 우리 차량 앞뒤 차량 사이의 자유 거리를 기록하는 로그 파일이 있습니다. 차량이 정지된 경우에는 거리를 측정하지 않습니다.
내 selfdriving.log
파일은 다음과 같습니다.
2021.04.01. 13:14:30:78 78 110 110
2021.04.01. 13:14:30:99 79 111 111
2021.04.01. 13:14:31:50 80 111 119
2021.04.01. 13:14:59:87 87 118 117
2021.04.01. 13:16:59:87 86 116 119
2021.04.01. 13:17:22:32 75 117 115
2021.04.01. 13:18:50:65 75 96 109
2021.04.01. 13:18:55:00 0 0 0
내가 원하는 것은 마지막 로그 항목 이후 1분 이상 후에 로그 항목이 생성된 횟수를 반환하는 스크립트를 작성하는 것입니다. 따라서 내 계산이 정확하다면 2
이 경우 반환되어야 합니다. grep
작동 방식과 반환 값을 변수에 넣는 방법을 이해하지 못합니다 . 지금까지 나는 다음을 시도했습니다.
#!/bin/sh
for i in "cat selfdriving.log"
do
grep (([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]:[0-9][0-9]
done
제가 아는 한, 평가는 높지 않습니다.
답변1
시간을 비교해야 하는 문제에 대한 해결책은 날짜/시간을 정수 초로 변환하는 것입니다. 그런 다음 이전 레코드의 타임스탬프를 기억하면 연산을 수행하여 60초보다 큰 차이를 찾을 수 있습니다.
GNU awk는일부 내장 시간 함수
gawk -F'[. :]+' '
{timestamp = mktime($1" "$2" "$3" "$4" "$5" "$6)}
NR == 1 {prev = timestamp}
timestamp - prev >= 60 {print}
{prev = timestamp}
' selfdriving.log
2021.04.01. 13:16:59:87 86 116 119
2021.04.01. 13:18:50:65 75 96 109
가능한 레코드 수를 얻으려면
- 출력을 파이프하여
| wc -l
개수를 얻거나 - awk에서 계산을 수행하고 결과를 END 블록에 인쇄합니다.