쉘에서 두 줄의 시간 형식을 빼야 합니다. 시간 형식은 hh:mm:ss입니다. 다음 코드를 사용하여 시간을 가져옵니다.
cat /var/log/kern.log |grep usb |tail -2| awk '{print $3}'
위 코드의 출력은 다음과 같습니다.
18:23:24
18:20:20
초 단위로 차이점을 어떻게 찾을 수 있나요?
답변1
나는 더 나아갈 것이다 (영감:이 게시물):
# => 18:23:24 --> 66204
grep usb /var/log/kern.log|tail -2|awk '{print $3}'|awk -F: '{print ($1 * 3600) + ($2 * 60) + $3 }'
그래서 나는 다음을 수행했습니다.
66204
66020
그러면 다음과 같이 할 수 있습니다:
echo $((66204-66020)) # => 184
답변2
보다 일반적인 솔루션은 다른 날짜의 시간에도 작동하므로 다음과 같습니다.
echo "18:23:24
18:20:20" |
(read later_time; read former_time;
former_seconds=$(date --date="$former_time" +%s);
later_seconds=$(date --date="$later_time" +%s);
echo $((later_seconds-former_seconds)) )
184
답변3
다음을 사용하면 awk
한 번의 통화로 이 작업을 수행할 수 있습니다.
awk '
/usb/{
("date +%s -d "$3)|getline t[++i];
}
END{
print t[i-1]-t[i];
}' /var/log/kern.log
답변4
awk의 전체 파이프라인에는 불필요한 파이프가 많지 않습니다.
Costas와 유사하지만 외부 명령을 사용하지 않습니다.
awk '/usb/{split($3,a,":");b[++x]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[x-1]-b[x]}' /var/log/kern.log
이는 파이프라인을 유지하기로 결정한 경우 날짜 설정의 마지막 지점일 뿐입니다.
awk '{split($1,a,":");b[x++]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[0]-b[1]}'