파이프라인에서 cat 및 gzip 파일을 사용하면 다른 결과가 나타납니다.

파이프라인에서 cat 및 gzip 파일을 사용하면 다른 결과가 나타납니다.

왜 그러한 출력을 제공하며(두 명령 모두 동일한 작업을 수행해야 함) 동일한 출력을 제공하도록 하려면 어떻게 해야 합니까?

diff <(cat some_file | gzip -c - | base64) <(gzip -c some_file | base64)
1,2c1,2
< H4sIACSOZFUAA2XNsRHAMAgDwDqZRkIQ8P6L+c5xnIL2m2c5E6BdIQA5cHPTaGTqlI3ki2jSoWrk
< e1Tw0PNSMT4KdPKfJgNiJT++AAAA
---
> H4sICGcqSlUAA2Z0X2FkLnNob3J0AGXNsRHAMAgDwDqZRkIQ8P6L+c5xnIL2m2c5E6BdIQA5cHPT
> aGTqlI3ki2jSoWrke1Tw0PNSMT4KdPKfJgNiJT++AAAA

파일 내용은 다음과 같습니다.

184170012   53000790
184170019   53000790
184170023   53000790
184170027   53000790
184170034   53001233
184170038   53001233
184170042   53000351
184170046   53000815
184170050   53000815
184170054   53000815

tab두 열 사이와 각 행의 끝에 new line문자가 있습니다 .

답변1

gzip은 입력 파일의 파일 이름을 출력으로 인코딩합니다. -c옵션이 있는 경우에도 이 작업을 수행합니다. 를 사용하여 이를 볼 수 있습니다 gzip -c some_file | strings|head -1. 그러나 를 읽을 때 stdingzip은 파일 이름을 모르기 때문에 이를 수행하지 않습니다. 출력에서 파일 이름과 타임스탬프를 생략하도록 gzip에 지시할 수 있습니다 -n.

관련 정보