고양이는 대용량 파일에 대해 작동하지 않습니다

고양이는 대용량 파일에 대해 작동하지 않습니다

네 개의 큰 파일을 두 개로 연결하려고 합니다. *_1P.gz 파일에는 해당 *_2P.gz와 동일한 수의 행이 포함되어 있습니다.

이 파일에는 A_1P.gz모두 줄이 A_2P.gz포함되어 있습니다 1104507560.
이 파일에는 B_1P.gz모두 줄이 B_2P.gz포함되어 있습니다 1182136972.

그러나 행이 cat A_1P.gz B_1P.gz > C_1P.gz| wc -l반환 186974687되고 그 다음에 행이 cat A_2P.gz B_2P.gz > C_2P.gz| wc -l반환되므로 182952523두 파일은 두 입력 파일보다 훨씬 작을 뿐만 아니라(길이는 2B 줄 이상이어야 하지만 실제로는 2M 미만입니다) 행 개수도 다릅니다. 오류를 표시하지 않고 명령이 실행됩니다.

무슨 일이 일어나고 있는지 이해할 수 없습니다. cat이 네 개의 큰 파일도 생성했는데 제대로 작동했습니다.

  • 무엇이 문제일까요?
  • gzip 파일을 사용하지 않고 연결하려면 어떤 다른 옵션을 사용해야 합니까 cat?

저는 CentOS 서버에서 작업하고 있습니다. 아직 197G의 공간이 있으므로 문제가 되지 않습니다(또는 적어도 오류가 표시되어야 합니다).

답변1

이 파일들은 다음과 같습니다.압축. 따라서 먼저 파일의 압축을 풀지 않고는 wc -l파일을 직접 사용하여 파일의 원래 줄 수를 계산할 수 없습니다.

cat결과 파일 자체가 유효한 압축 파일이므로 이러한 유형의 압축 파일을 연결하는 데 사용할 수 있습니다 . 나중에 압축을 풀면 두 파일의 압축되지 않은 데이터를 연결한 파일이 생성됩니다.

cat A_1P.gz B_1P.gz >C_1P.gz

행 수를 계산하려면 다음을 수행하십시오 C_1P.gz.

zcat C_1P.gz | wc -l

또는

gunzip -c C_1P.gz | wc -l

또는

gzip -dc C_1P.gz | wc -l

그러나 줄 수를 계산하려면 파일의 압축을 풀어야 합니다. 그렇지 않으면 압축된 데이터의 일부로 파일 압축 알고리즘에 의해 생성된 "무작위" 개행 문자를 계산합니다(이것은 압축되지 않은 파일의 줄과 아무 관련이 없습니다).

관련 정보