![지정된 시작 시간과 종료 시간 사이에 로그 파일에서 데이터를 가져오는 방법은 무엇입니까?](https://linux55.com/image/8355/%EC%A7%80%EC%A0%95%EB%90%9C%20%EC%8B%9C%EC%9E%91%20%EC%8B%9C%EA%B0%84%EA%B3%BC%20%EC%A2%85%EB%A3%8C%20%EC%8B%9C%EA%B0%84%20%EC%82%AC%EC%9D%B4%EC%97%90%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이것은 내 로그 파일(Test.Log)입니다.
May 10 01:06:05 A
May 10 01:06:06 B
May 10 01:06:07 C
May 10 01:07:01 D
May 10 01:07:02 E
May 10 01:07:09 F
May 10 01:07:11 G
May 10 01:07:11 H
May 10 01:07:12 I
May 10 01:07:13 J
May 10 01:07:15 k
지정된 시작 시간부터 종료 시간까지의 데이터를 인쇄하고 싶습니다.
Sample.sh 파일에 코드를 입력했습니다.
BEGIN { StartFound = 0;StartNotFound = 0; EndFound=0; EndNotFound=0; }
{
if($0 ~ Start)
{
StartFound = 1;
StartNotFound = 0;
EndNotFound=0;
EndFound=0;
}
else
{
StartNotFound = 1;
StartFound = 0;
EndNotFound=0;
EndFound=0;
}
if($0 ~ End)
{
EndFound=1;
StartNotFound = 0;
StartFound = 0;
EndNotFound=0;
}
else
{
StartFound = 0;
StartNotFound = 0;
EndNotFound = 1;
EndFound=0;
}
if(StartFound)
{
ANS = (Start <= $3 && $3 <= End);
print ANS;
}
if(StartNotFound)
{
ANS = (Start < $3 && $3 <= End);
print ANS;
}
if(EndNotFound)
{
ANS = (Start <= $3 && $3 < End)
print ANS;
}
if(EndFound)
{
ANS = (Start <= $3 && $3 <= End);
print ANS;
}
}
GitBash에서는 다음을 사용했습니다.
$ awk -v start=01:07:08 -v stop=01:07:14 -f Sample.sh Test.log
다음이 표시되어야 합니다.
May 10 01:07:09 F
May 10 01:07:11 G
May 10 01:07:11 H
May 10 01:07:12 I
May 10 01:07:13 J.
그리고 내 입력이
$ awk -v start=01:07:08 -v stop=01:07:11 -f Sample.sh Test.log
그러면 내 결과는 다음과 같습니다.
May 10 01:07:09 F
May 10 01:07:11 G
May 10 01:07:11 H
하지만 원하는 결과가 나오지 않습니다. 이 코드를 어떻게 개선할 수 있나요?
답변1
이 시도:
awk -v start="01:07:08" -v end="01:07:11" '$3 >= start { keep=1 } $3 > end { exit } keep { print }' Test.log