줄이 작성된 시점을 기준으로 파일 조각 잘라내기

줄이 작성된 시점을 기준으로 파일 조각 잘라내기

항상 실행되는 프로세스가 있고 로그 파일은 최대 5GB까지 가능하며 때로는 시간 간격을 기준으로 이 로그의 일부를 가져와야 합니다(보통 dd를 사용함). 시간 간격을 기준으로 로그 조각을 얻는 명령이 Linux에 있습니까?

추신: 이 로그에 있는 대부분의 줄에는 타임스탬프가 없습니다.

답변1

Wiese가 제안한 대로 이를 수행할 수 있는 명령이 없다면 파일의 외부 색인을 생성해 보는 것은 어떨까요?

단지 아이디어: 영원히 실행되고(또는 아래 설명을 거의 볼 수 있음) 인덱스 생성을 위한 시간 간격을 제공하는 스크립트를 작성할 수 있습니다.

PIDofThisInstance=$$
# ... you code for the header, checks... 
while true  ; do
  # This is the core of your cycle
    sync   # Maybe
    CurrentSize=`ls -s $MyFile  | awk '{print $1} ' `
    CurrentTime=`date +"%Y%m%d%H%M%S"`
    echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
    sleep $TimeToSleep
  # if (exit-condition)
  # then
  #    break           #Exit from the infinite loop.
  # fi
done 

그런 다음 시작/종료 날짜/시간을 제공하는 다른 스크립트를 실행하고 시작/종료 차원에 응답할 수 있습니다. 이 숫자에서 파일을 잘라낼 수 있습니다.

당신은 매우 큰 파일에 대해 이야기하고 있습니다. 그래서 나는 당신에게 이것을 권장하지 않습니다줄 번호가능한 head MyFile.log -n xxx | tail -n yyy. 매우 길 것입니다. 치수 처리가 향상되었습니다.

노트:

  • 이것이 형식화된 출력이 있는 로그인 경우(모르더라도) 개발 회사/프로그래머가 제공하는 일종의 분석 도구가 있을 가능성이 항상 있습니다. 몇 년 후에도 나타날 수 있습니다. IMHO 형식을 건드리지 않고 별도의 파일을 만드는 것이 좋습니다.
  • 로그를 생성한 프로그램의 PID를 알고 있는 경우 현재 PID(수동으로 종료해야 하는 경우), 파일 이름(로그 개체)과 같은 스크립트 매개변수를 작성하세요.
  • 로그를 생성한 프로그램의 PID가 더 이상 존재하지 않거나, 파일이 더 이상 존재하지 않거나, 실제 크기가 이전 크기보다 작거나(파일을 이동하거나 로그를 다시 시작하는 경우) 루프가 영원히 지속되거나 종료될 수 있습니다. 인덱스를 다시 시작해야 합니다).
  • $LastSize를 메모리에 유지하면 필요하지 않을 때 "로그 로그"에 줄을 인쇄하지 않거나 오랜 기간 동안 활동이 없으면 중지하도록 결정할 수 있습니다(또는 시간 간격을 동적으로 수정...).

관련 정보