다음과 같은 줄로 지속적으로 업데이트되는 텍스트 파일이 있습니다.
On 29-08-2018 18:30:29:05 bacteria detected 20 Machine learning error 10
등등(매초마다 새로운 줄을 받습니다).
18:30:29
내 C++ 프로그램에서 시작 및 중지 시간(형식)을 가져오겠습니다. 이것이 올바른 접근 방식입니까?
string er = "system ./RUN.sh ";
er = er + start + stop;
system(er.c_str());
그런 다음 .sh 파일에서 다음을 수행하십시오.
read start
read stop
입력을 읽으려면
다음 질문은 파일에서 줄을 읽어 관련 시간을 검색하고 중지 시간이 새 파일에 도달할 때까지 전체 줄을 복사하는 방법입니다.
해당 시점에 찾고 있던 파일이 새로운 위치로 복사되어 업데이트되지 않고, 다음에 .sh가 실행될 때만 교체됩니다.
알고리즘은 다음과 유사합니다.
if (Log_29-08-2018.txt->readline() contain "18:30:29")
while (RESULT.txt->readline() not contain "20:30:29")
/MINI_LOG/Log_29-08-2018.txt->writeline()
Log_29-08-2018.txt->readline()
done
fi
/MINI_LOG/Log_29-08-2018.txt
그리고 다른 날이 아닌 이상 다음에 실행할 때 파일을 업데이트 해야 합니다 .
매일 새로운 소스 파일을 받아 시간이 중복되지 않도록 합니다.
귀하의 예를 살펴봤지만 정확히 제가 필요한 것이 아니었고 이로 인해 많은 오류가 발생했습니다.
답변1
앗는 훌륭한 도구입니다. 코드가 간결하고 성능이 좋습니다. RUN.sh는 다음과 같습니다
#!/bin/sh
awk -v start="$1" -v stop="$2" '
$3 ~ "^"start {p = 1}
$3 ~ "^"stop {p = 0}
p
' logfile > resultfile