이것이 내가 지금 하는 일이다.
sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv
파일 크기가 90GB인데 이 오류 메시지가 나타납니다.
sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded
이전에는 -T 옵션을 사용하지 않았는데, 분명히 tmp 디렉토리가 이를 처리할 만큼 크지 않았습니다. 현재 디렉토리에는 약 200GB의 여유 공간이 있습니다. 임시 파일을 정렬하는 것만으로는 충분하지 않습니까?
병렬 옵션이 상황에 영향을 미치는지 모르겠습니다.
답변1
문제는 디스크 할당량을 설정한 것 같은데 사용자가 너무 많은 공간을 차지할 권한이 없다는 것입니다 /some_dir
. 아니요, 이 --parallel
옵션은 이에 영향을 미치지 않습니다.
해결 방법으로 파일을 더 작은 파일로 분할하고 각 파일을 별도로 정렬한 다음 다시 단일 파일로 병합할 수 있습니다.
## split the file into 100M pieces named fileChunkNNNN
split -b100M file fileChunk
## Sort each of the pieces and delete the unsorted one
for f in fileChunk*; do sort "$f" > "$f".sorted && rm "$f"; done
## merge the sorted files
sort -T /some_dir/ --parallel=4 -muo file_sort.csv -k 1,3 fileChunk*.sorted
마법은 -m
GNU 정렬(from ) 옵션 입니다 info sort
.
‘-m’
‘--merge’
Merge the given files by sorting them as a group. Each input file
must always be individually sorted. It always works to sort
instead of merge; merging is provided because it is faster, in the
case where it works.
이를 위해서는 모든 부품을 저장하기 위해 90G 파일에 대해 약 180G의 여유 공간을 제공해야 합니다. 그러나 실제 정렬은 1억 개의 청크로만 정렬하므로 많은 공간을 차지하지 않습니다.