tac unzipped.log | grep -m1 pattern
tac
훌륭하게 작동하지만 압축 파일에는 명령을 사용할 수 없습니다 .
tac zipped.gz | zgrep -m1 pattern
아무것도 반환하지 않습니다.
tac
파일의 압축을 풀지 않고 사용할 수 있는 방법이 있나요 ?
답변1
gzip은 첫 번째 바이트부터 마지막 바이트까지 스트림으로 작동합니다. 중간부터 압축을 풀 수 없습니다. 대부분의 압축 도구는 중간부터 압축 해제를 허용하면 시작과 끝 사이의 유사성을 최대한 활용하지 못하기 때문에 이렇게 합니다. 따라서 gzip으로 압축된 파일에서 문자열을 검색하려면 어쨌든 전체 파일의 압축을 풀어야 합니다(관심이 있는 경우 최소한 첫 번째 일치 항목까지).
또한 tac
행은 바이트가 아니라 반전됩니다. 압축이 풀린 파일은 줄로 나누어져 있지 않기 때문에(다른 파일처럼 개행 문자가 1바이트인 이진 파일입니다) 이로 인해 파일이 사용할 수 없게 됩니다.
압축을 푼 파일을 되돌릴 수 있습니다.
zcat zipped.gz | tac | grep -m1 pattern
그러나 이것이 전체 파일을 검색하는 것보다 반드시 빠르지는 않습니다. tac
그 자체가 그렇게 빠르지는 않기 때문입니다(대부분의 응용 프로그램은 처음부터 끝까지 읽으므로 커널은 이 경우를 최적화하는 경향이 있습니다. 그런 다음 tac
각 바이트를 테스트하여 개행 문자입니다). 마지막 행만 원하는 경우 추출할 수 있습니다.
zcat zipped.gz | grep pattern | tail -n1