거대한 로그 파일의 마지막 몇 줄을 읽는 방법은 무엇입니까?

거대한 로그 파일의 마지막 몇 줄을 읽는 방법은 무엇입니까?

로그 크기는 55GB입니다.

나는 시도했다:

cat logfile.log | tail

하지만 이 방법은 시간이 많이 걸린다. 대용량 파일을 더 빠르게 읽는 방법이나 다른 방법이 있습니까?

답변1

cat logifle.log | …이는 중복되며 실제로 속도 저하를 유발합니다. tail logfile.log고양이가 없으면 더 의미가 있을 것 같아요!

훨씬 빠르기 때문에입력이 되지 않을 때탐색 가능한, tail수행해야 할 작업은 모든 stdin을 한 줄씩 읽고 마지막 10줄을 버퍼에 유지하는 것입니다.마지막10행) 입력이 cat메커니즘을 통해 파이프에서 나오도록 하면 해당 입력을 검색할 수 없습니다.

이는 속도가 느리고 파일의 행 크기가 GB가 아닌 한 매우 어리석은 일입니다. 처음 54.9GB를 건너뛰십시오. 남은 100MB는 확실히 마지막 10줄보다 적지 않을 것입니다! 100MB에서 마지막 10개 행을 가져오는 것만으로도 충분히 빠릅니다.

tail --bytes 100M logfile.log | tail

그러나 GNU Coreutil1 구현을 사용하고 있다면 tail이미 이 작업을 수행하고 있습니다(즉, 파일 끝에서 2.5kB를 뺀 부분을 찾고 거기서부터 찾기 시작합니다). 통과아니요여기서 남용 cat하되 tail파일 자체를 읽도록 놔두거나 리디렉션을 사용하면 효과는 동일합니다! 더 빠른 결과를 얻을 수 있습니다.


tail1 GNU Coreutils, 최신 busybox는 제가 확인한 두 가지 구현입니다. Stéphane은 아래에서 원본도 마찬가지라고 지적합니다.1970년대 PWB Unix 구현완료되었습니다. 하지만 아직은 구현 세부 사항일 뿐입니다.

답변2

지금처럼 파일 전체를 읽는 tail logfile대신 을 사용하여 파일의 마지막 10줄을 직접 가져와야 합니다 .cat logfile | tail

답변3

tail -nX path to your log file

X의 경우 읽으려는 행 수를 사용하십시오.

tail -n30 /var/log/syslog

내 /var/log/syslog의 마지막 30줄 표시

답변4

tac를 거꾸로 사용할 수 있습니다 cat. 하지만 10줄로 제한하는 것은 어렵기 때문에 하지 마세요. tail그런 용도니까 꼭 사용해 보세요 .

관련 정보