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