로그 파일을 한 번에 X줄씩 "추적"하는 방법

로그 파일을 한 번에 X줄씩 "추적"하는 방법

초당 수백 줄(예: 초당 16x, 12개의 특정 줄)을 생성하는 로그 파일이 있습니다.

이 로그 파일을 실시간으로 깔끔하게 표시하기 위해 명령줄이나 셸 스크립트를 실행하고 싶습니다. 그러나 를 실행하면 tail -f logfile.txt텍스트가 터미널 창 밖으로 빠르게 스크롤되어 사람의 눈으로 읽을 수 없습니다. 저는 아직 명령줄을 마스터하지 않았기 때문에 지금 당장 생각할 수 있는 것은 다음과 같습니다.

터미널 창에서 한 번에 12줄만 인쇄하고 자동으로 새로 고치기를 원합니다. 예를 들면 다음과 같습니다.

// while ( Ctrl+C hasn't been hit )
// {
//   clear terminal window
//   print last 12 lines of logfile.txt
//   wait until logfile is 12 lines longer
// }

어떤 아이디어가 있나요?

편집: 할 수 있다는 것이 밝혀졌습니다 tail -f logfile.txt. 터미널 창 높이를 12로 설정하면 됩니다. 이를 통해 내가 원하는 것에 매우 가까워지지만 "순진한" 접근 방식처럼 보입니다. 누군가가 더 우아한 솔루션을 갖기를 바랍니다.

답변1

M초마다를 사용하여 마지막 N개 행을 볼 수 있습니다 watch. N=20, M=3이라고 가정하면,

watch -n3 tail -n20 logfile.txt

분명히 업데이트 간격이 쓰기 간격을 초과하면 많은 출력이 손실될 것입니다. 그러나 제가 이해한 바로는 이것이 귀하가 원하는 것입니다.

답변2

Bash >= 4에는 특별한 내장 기능이 있습니다 mapfile:

tail -f logfile.txt | while mapfile -t -n 12 lines && ((${#lines[@]})); do
    clear
    printf '%s\n' "${lines[@]}"
    sleep 0.1 # Might be necessary or you won't see anything at all except the last batch of lines
done

발췌:Bash를 사용하여 한 번에 n 줄 읽기.

답변3

나는 그것을 사용하여 less로그를 보는 것을 좋아합니다. 몇 가지 유용한 less 명령:

  • G마지막 줄로 이동
  • R파일 새로 고침(다음에 G)
  • F파일 실시간 테일링(일명 tail -f): Ctrl+C테일링을 중지하려면 클릭하세요.

답변4

tail -f logfile.txt | less

Glenn Jackman이 강조한 인터페이스를 사용하여 이동할 수 있습니다.

  • F따르다
  • Ctrl- C팔로우 중지
  • q그만두다
  • /정규식 검색

관련 정보