줄이 아닌 파일의 마지막 N 바이트를 테일 / 그리프 / awk하는 방법


14

일반 텍스트 로그 파일 (myapp.log)에 로깅하는 응용 프로그램이 있지만 각 로그 항목 끝에 줄 바꿈 문자를 쓰지 않는 것 같습니다. 내가 명령을 실행하면 tail -n 50 myapp.log실제로 수백 줄의 텍스트 (로그 항목)를받습니다.

이 로그 파일은 대략 1GB로 매우 크며, 마지막 CR 및 / 또는 LF가 얼마나 오래 전에 삽입되었는지 알고 있습니다. 예를 들어 마지막 2MB를 어떻게 알 수 있습니까?

답변:


27

-c스위치 사용 (2MB = 2 * 1024 * 1024 = 2097152 바이트) :

tail -c 2097152 myapp.log

제안을 해준 Petr Uzel 에게 감사합니다 . 일부 테일 구현에서는 다음과 같이 마지막 킬로바이트 (k) 또는 메가 바이트 (m)를 인쇄하는 단위를 추가 할 수 있습니다.

tail -c 2m myapp.log

그러나 POSIX, UNIX (SUS) 또는 Linux (LSB) 중 어느 것도 표준이 아니며 이식성이 없습니다. 또한 용어 "Mega"/ "kilo"... 및 해당 약어 (M, k ...)는 모호한 의미 (1000 대 1024)를 갖기 때문에이 구현의 tail의미가 무엇인지에 대한 보장이 많지 않습니다. 2m(현재 구현의 현재 버전은 1024 변형을 지원하는 것으로 보입니다).


5
꼬리는 c 스위치의 인수로 단위가있는 숫자를 받아 들일 수 tail -c 2M myapp.log있어야 하므로 작동해야합니다.
Petr Uzel

@ PetrUzel : 감사합니다. 답변을 수정하여 추가했습니다.
Birei

이제 나는 바보처럼 느낀다 :) 신속 함을 주셔서 감사합니다. 정말로 감사합니다. 좋은 제안!
jwbensley 2016 년

1
완벽, 이것이 도움이 될지 확실하지 않지만이 텍스트 문자열을 추가 할 것입니다. 왜냐하면 내가 찾고있는 키워드 였기 때문입니다 (좋은 시간이 걸렸습니다) : "두 바이트 위치 (행이 아닌) 사이의 cat 파일 데이터) "
10
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.