2010-03-16 3 views
1

파일을 정렬하려면 :가장 빠른 방법은 내가 줄 거대한 텍스트 파일이

-568.563626 159 33 -1109.660591 -1231.295129 4.381508 
-541.181308 159 28 -1019.279615 -1059.115975 4.632301 
-535.370812 155 29 -1033.071786 -1152.907805 4.420473 
-533.547101 157 28 -1046.218277 -1063.389677 4.423696 

내가 원하는 5 컬럼에 따라 파일을 정렬, 그래서

-568.563626 159 33 -1109.660591 -1231.295129 4.381508 
-535.370812 155 29 -1033.071786 -1152.907805 4.420473 
-533.547101 157 28 -1046.218277 -1063.389677 4.423696 
-541.181308 159 28 -1019.279615 -1059.115975 4.632301 
를 얻을 것

사용 목적 :

for file.txt; sort -k5n $ i;를 수행하십시오.

다 나는 이것이 가장 빠른 또는보다 효율적인 방법이

감사

답변

6

for를 사용하는 경우 궁금해? 왜 안되는거야 :

sort -k5n file.txt 

그리고 어떤 종류가 더 효율적인지는 여러 가지 문제에 달려있다. 특정 데이터 세트 (크기 및 기타 속성)에 대한 더 빠른 정렬을 의심 할 여지가 없습니다. 버블 정렬은 실제로 다른 입력보다 성능이 우수 할 수 있습니다.

그러나 표준 정렬을 테스트하고 너무 느리다는 것을 확인 했습니까? 그것이 당신이해야 할 첫 번째 일입니다. 내 컴퓨터 십초 아래에서 그 라인의 400 만 수행 할 수 있습니다 (NO입니다 지구상에서 gruntiest 수단) 적어도 하나의 트릭이있다, 그런 말로 미루어 보아,

real  0m9.023s 
user  0m8.689s 
sys  0m0.332s 

하는 수도 속도를 최대 . 정렬을 적용하기 전에 고정 길이 필드가있는 고정 길이 레코드로 파일을 변환하십시오. 특정 문자 세트 및 고정 길이 레코드에 대한 정렬은 가변 필드 및 레코드 크기에 허용 된 더 유연한 정렬보다 훨씬 빠를 수 있습니다. sort.

그런 식으로 O(n) 연산 (변환)을 추가하여 최대 O(n log n) 연산 (정렬)을 최대 속도로 수행 할 수 있습니다.

그러나 모든 최적화와 마찬가지로 측정, 추측하지 마세요! 당신이 분류하는 방법에는 여러 파일이있는 경우에만 1 개 개의 파일이 있기 때문에

1

, 당신은 정렬 단지 파일 이름을 통과하지만, 루프를 사용할 수 있습니다

$ sort -k5n file 
관련 문제