현재 500GB 텍스트 파일의 UNIX 정렬 (Windows 컴퓨터에서 GitBash를 통해)을 수행하고 있습니다. 주 디스크의 공간이 부족하여 -T 옵션을 사용하여 전체 파일을 수용 할 수있는 충분한 공간이있는 디스크로 임시 파일을 보냅니다. 문제는 디스크 공간을보고 있었고 임시 파일이 원래 파일이 이미 초과 된 것입니다. 얼마나 더 나아질 지 모르겠지만 임시 파일에 필요한 공간을 예측할 수있는 규칙이 있는지 궁금합니다.유닉스 정렬에 필요한 디스크 공간
답변
this unix.SE answer에 설명 된대로 수동으로 배치 할 수 있습니다.
콘텐츠를 정렬 할 수있을만큼 작은 조각으로 나눌 매우 기본적인 쿼리를 찾습니다. 예를 들어 단어 파일 인 경우 grep ^a …
, grep ^b …
등과 같은 검색어를 만들 수 있습니다. 일부 항목은 다른 항목보다 세분화가 필요할 수 있습니다. 이 GZIP의 기본 gzip -6
거의 빨리 때문에 내가 xz -0
을 사용하고
#!/bin/bash
for char1 in other {0..9} {a..z}; do
out="/tmp/sort.$char1.xz"
echo "Extracting lines starting with '$char1'"
if [ "$char1" = "other" ]; then char1='[^a-z0-9]'; fi
grep -i "^$char1" *.txt |xz -c0 > "$out"
unxz -c "$out" |sort -u >> output.txt || exit 1
rm "$out"
done
echo "It worked"
아직이 공간을 절약에서 훨씬 더 나은 :
당신은 스크립트처럼 할 수 있습니다. sort -u
의 종료 값을 보존하기 위해 최종 출력에서 생략했지만 대신 크기 확인 (iirc, 정렬은 0 출력으로 실패 함)을 사용하고 sort -u |xz -c0 >> output.txt.xz
을 사용할 수 있습니다. xz (및 gzip) 컨테이너를 사용하면 아카이브를 연결할 수 있습니다 (전에도 written about that했습니다.) 각 그렙 실행의 출력이 이미 (0
등, a
이전 인 1
이전 인) 분류되기 때문에 최종 조립이 sort
(주, "기타"를 통해 실행하지 않도록
이 작품 일부 영숫자가 숫자 앞에오고 다른 문자는 숫자와 문자 사이에 있고 다른 문자는 여전히 문자 뒤에 있기 때문에 grep의 -i
플래그를 제거하고 추가적으로 대소 문자를 구분하기 위해 {A..Z}
을 반복 할 수 있습니다. 각 개별 반복은 분명히 정렬되어야하지만 잘하면 관리 할 수 있어야합니다.
모든 반복을 완료하고 "작동 했음"이라고 말하면 프로그램이 종료 된 후 마지막 반복에 대해 더 개별적인 배치로 스크립트를 편집 할 수 있습니다. 이전 iterations가 모두 output.txt에 성공적으로 저장되었으므로 이전 반복을 모두 제거하십시오.
- 1. 필요한 디스크 공간 계산 오산 방지
- 2. 확장 디스크 공간 EC2
- 3. SolrNet 공간 검색 - 정렬에 geodist()
- 4. iPhone의 디스크 공간 예약
- 5. Install4j - "디스크 공간 부족"
- 6. cassandra 디스크 공간 사용
- 7. Powershell 디스크 공간 검사
- 8. Cassandra - 디스크 공간 부족
- 9. Powershell 디스크 공간 스크립트
- 10. 디스크 공간 오류
- 11. AllegroGraph 채우기 디스크 공간
- 12. Linux 서버의 디스크 공간
- 13. 여유 디스크 공간 계산
- 14. MySQL 디스크 공간 지우기
- 15. 디스크 공간 오류가 발생하지만 디스크 공간이 충분합니다.
- 16. 권장 예비 하드 디스크 공간
- 17. 표 너무 많은 디스크 공간
- 18. 디스크 공간 예측을 사용하여 R
- 19. "sticking"하지 않는 디스크 공간
- 20. install4j - 디스크 공간 부족 오류
- 21. 실패한 삽입물에서 디스크 공간 회수하기
- 22. RDS 디스크 공간 활용도를 확인해야합니다.
- 23. TFS 분기 및 디스크 공간
- 24. pdf 호스팅 및 디스크 공간
- 25. Eclipse .metadata \ .plugins 디스크 공간
- 26. 필요한 개체 : 이름 공간
- 27. MongoDB 필요한 디스크 크기를 측정하십시오
- 28. AWS EC2 우분투 인스턴스 디스크 공간 늘리기
- 29. 유닉스 정렬을 할 때 디스크 사용을 최소화하십시오.
- 30. 유닉스 터미널에서 특정 파일의 총 공간 사용량을 계산하십시오.
유닉스 정렬이 GNU 정렬과 비슷하게 작동하면, 초기 패스는 램 크기에 기초한 임시 파일을 만든다. 메모리에서 정렬에 사용할 수있는 1GB의 RAM이 있다고 가정하면 500 개의 1GB 파일을 생성 한 다음 해당 파일에 대해 16 가지 방법의 병합을 반복합니다. 또한 각 병합 후에 파일을 삭제한다고 가정하면 516GB의 공간이 필요하며 각 파일은 클러스터 (파일 할당) 크기 경계로 반올림됩니다. 마지막 병합에서 필요한 디스크 공간은 파일 크기의 두 배가됩니다 (클러스터 결합에 반올림 됨). 따라서 1,000GB가 조금 넘습니다. – rcgldr
쥐! 좀 더 많은 스토리지에 투자해야 할 것 같습니다. – Thoughtcraft
임시 폴더에서도 마지막으로 병합됩니까? 하나의 디스크에 두 개의 완전한 파일 복사본이있는 것을 피하기 위해 출력을 temp와 다른 위치로 지정했습니다. – Thoughtcraft