파일 크기는 962,120,335바이트입니다.
HP-UX ******B.11.31 U ia64 ****** 무제한 사용자 라이센스
hostname> what /usr/bin/awk
/usr/bin/awk:
main.c $Date: 2009/02/17 15:25:17 $Revision: r11.31/1 PATCH_11.31 (PHCO_36132)
run.c $Date: 2009/02/17 15:25:20 $Revision: r11.31/1 PATCH_11.31 (PHCO_36132)
$Revision: @(#) awk R11.31_BL2010_0503_1 PATCH_11.31 PHCO_40052
hostname> what /usr/bin/sed
/usr/bin/sed:
sed0.c $Date: 2008/04/23 11:11:11 $Revision: r11.31/1 PATCH_11.31 (PHCO_38263)
$Revision: @(#) sed R11.31_BL2008_1022_2 PATCH_11.31 PHCO_38263
hostname>perl -v
This is perl, v5.8.8 built for IA64.ARCHREV_0-thread-multi
hostname:> $ file /usr/bin/perl
/usr/bin/perl: ELF-32 executable object file - IA64
hostname:> $ file /usr/bin/awk
/usr/bin/awk: ELF-32 executable object file - IA64
hostname:> $ file /usr/bin/sed
/usr/bin/sed: ELF-32 executable object file - IA64
여기에는 GNU 도구가 없습니다.
내 옵션은 무엇입니까?
대용량 GB 텍스트 파일에서 중복 줄을 제거하는 방법은 무엇입니까?
그리고
http://en.wikipedia.org/wiki/External_sorting#External_merge_sort
perl -ne 'print unless $seen{$_}++;' < file.merge > file.unique
던지다
Out of Memory!
960MB 결과 파일은 평균 50MB로 결합됩니다: 22900038, 24313871, 25609082, 18059622, 23678631, 32136363, 49294631, 61348150, 85237944, 2586, 9, 726 55093, 73474145, 82539534, 65101428, 57240031, 79481673, 539293, 38175881
질문: 외부 정렬 병합 및 중복 제거를 수행하는 방법은 무엇입니까? 즉, 이 데이터에서 중복된 데이터를 제거하는 방법은 무엇입니까?
답변1
현재 수행 중인 프로세스가 메모리 부족 오류로 인해 실패하는 것 같습니다.
- 여러 데이터 파일 만들기
- 그들을 하나로 연결하다
- 결과 정렬, 중복 레코드(행) 삭제
다음과 같은 과정을 수행하시면 될 것 같아요
- 여러 데이터 파일 만들기
- 각 항목을 독립적으로 정렬하고 중복 항목을 삭제합니다(
sort -u
). - 정렬된 데이터 파일의 결과 집합을 병합하고 중복 항목을 삭제합니다(
sort -m -u
).
답변2
물론 GNU/Linux 도구는 없습니다:무엇Linux에는 전혀 존재하지 않는 SCCS(소스 코드 제어 시스템)의 일부입니다.
따라서 아마도 Unix를 사용하고 있을 것입니다. 있다유형알고리즘은 다음과 같은 문제를 처리할 수 있습니다.UNIX Sort 명령의 알고리즘 세부정보크기를 나타내는 입력중간 사이즈, 크기가 있는 메모리질소, 로 나누어월 일메모리에 적합하고 연속적으로 처리되는 블록입니다.
요구 사항을 충족해야 합니다.
답변3
% perl -ne 'if ( $seen{$_}++ ) {
$count++ ;
if ($count > 1000000) {
$seen = () ;
$count = 0 ;
}
} else {
print ;
}' <eof
a
a
a
b
c
a
a
a
b
c
eof
a
b
c
%