문자열이 포함된 텍스트 파일의 관련 줄을 다른 파일에 복사합니다.

문자열이 포함된 텍스트 파일의 관련 줄을 다른 파일에 복사합니다.

다음과 같은 줄로 지속적으로 업데이트되는 텍스트 파일이 있습니다.

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

관련 정보