큰 파일 의 정렬 과 무 게 를 줄 이 는 것 은 매우 간단 하 다.

2730 단어 큰 문서
한 학교 에서 학생 을 모집 하 는 면접 문 제 는 큰 파일 (예 를 들 어 1T) 을 줄 에 따라 정렬 하고 무 게 를 제거 하 는 것 이다.
간단 한 해결 방안 은 큰 파일 의 단어 크기 가 고 른 몇 개의 작은 파일 을 먼저 친 다음 에 작은 파일 에 대해 순 서 를 정 한 다음 에 Merge 의 모든 작은 파일 을 Merge 하 는 과정 에서 중복 되 는 내용 을 제거 하 는 것 이다.
Linux 에서 이 논 리 를 실현 하려 면 코드 를 직접 쓰 지 않 아 도 됩 니 다. 셸 에 내 장 된 명령: split, sort 만으로 도 충분 합 니 다.우 리 는 이 절 차 를 스 크 립 트 로 연결 해서 셸 스 크 립 트 파일 에 썼 다.파일 이름 sortuniq.sh.
 1 #!/bin/bash

 2 lines=$(wc -l $1 | sed 's/ .*//g')

 3 lines_per_file=`expr $lines / 20`

 4 split -d -l $lines_per_file $1 __part_$1

 5 

 6 for file in __part_*

 7 do

 8 {

 9   sort $file > sort_$file

10 } &

11 done

12 wait

13 

14 sort -smu sort_* > $2

15 rm -f __part_*

16 rm -f sort_*  

사용 방법:./sortuniq.sh file_to_be_sort file_sorted
이 코드 는 큰 파일 을 20 개 또는 21 개의 작은 파일 로 나 누고 배경 에서 작은 파일 을 병렬 적 으로 정렬 한 다음 결 과 를 합 쳐 다시 시작 합 니 다.
만약 에 무 거 운 것 만 없 으 면 정렬 할 필요 가 없다. 또 다른 사고방식 이 있다. 파일 의 줄 마다 hash 값 을 계산 하고 hash 값 에 따라 이 줄 의 내용 을 작은 파일 에 넣 고 100 개의 작은 파일 을 나 누 어야 한다 고 가정 하면 (hash% 100) 에 따라 파일 의 내용 을 나 누 어 주 고 작은 파일 에서 무 거 운 것 을 실현 하면 된다.

좋은 웹페이지 즐겨찾기