컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, December 07, 2006

윈도우 SORT 명령, 숫자 크기순 정렬(소팅) 문제 해결, Perl(펄)로


MS윈도우의 도스창(명령 프롬프트;CMD.EXE)에서의 SORT 명령은, 숫자를 소팅할 수 없는 문제가 있습니다.

만약 숫자로 이루어진 파일을 소팅하면, 숫자 크기 순으로 소트되지 않고, 맨 앞의 숫자의 아스키 코드 순서대로 나와 버립니다. 그래서 뒤죽박죽이 되고, 정렬이 되지 않습니다.

그래서 펄을 사용하여, 숫자 크기순으로 소팅할 수 있는 프로그램을 만들었습니다. 액티브펄(ActivePerl)을 무료로 다운로드 받아서 윈도우에 설치한 후 실행하면 됩니다.


파일명: sortNum.pl
#!/usr/bin/perl
use strict; use warnings;


  while (<>) {                    # 파일 열어, 한 줄씩 읽기
    chomp;                        # 개행 문자 제거
    s/^\s+//;                     # 좌측에 공백 있으면 제거
    s/\s+$//;                     # 우측에 공백 있으면 제거
    push @_, $_ unless $_ eq "";  # (빈 문자열이 아닌 이상) 배열에 추가
  }


  @_ = sort {$a <=> $b} @_;       # 숫자 크기순으로 소트

  print "$_\n" foreach (@_);      # 화면에 결과 출력



sortNum.pl 0.txt
이렇게 펄스크립트 파일명 뒤에, 소팅할 파일을 지정합니다. 숫자로만 이루어진 텍스트 파일이어야 합니다.

앞뒤로 공백이 있어도 자동으로 제거해 줍니다. 다음의 테스트용 파일의 경우 앞뒤로 지저분한 공백이 있습니다. (다만, 이 블로그에 포스팅하는 과정에서 뒤쪽 공백들이 사라졌습니다)


테스트용으로 사용할 파일: 0.txt
  526363
  77
0
75858
8498


44
4545
0
15111


     11.62463
-151
+151.111



      99999999
    555
-4643.545
-0
   111



실행 결과:
D:\Z>sortNum.pl 0.txt
-4643.545
-151
0
0
-0
11.62463
44
77
111
+151.111
555
4545
8498
15111
75858
526363
99999999

D:\Z>

위와 같이, 숫자 크기순으로 깨끗이 정렬되었습니다. 앞뒤의 공백도 자동으로 제거되었습니다.


정렬 결과는 화면에 출력되는데, 결과를 파일로 저장하기 위해서는

sortNum.pl 0.txt > out.txt

이렇게 재지향(Redirection)을 하면, 화면 출력 결과가 하드에 파일로서 저장됩니다.





윈도우의 sort 명령으로 숫자 파일을 정렬했을 때의 오류:
다음의 첫번째 경우처럼 공백과 빈 줄이 섞여 나오기도 하지만, 공백과 빈 줄들을 다 제거해도
두번째 경우에서 보는 것과 마찬가지로, 숫자 크기순으로 나오지 않습니다.
D:\Z>sort 0.txt







-0
-151
-4643.545
      99999999
     11.62463
    555
   111
  526363
  77
+151.111
0
0
15111
44
4545
75858
8498

D:\Z>
D:\Z>
D:\Z>sort 0.txt
-0
-151
-4643.545
+151.111
0
0
11.62463
111
15111
44
4545
526363
555
75858
77
8498
99999999

D:\Z>



▶▶ 윈도우] SORT 명령 사용법, 문자열/텍스트파일 정렬(소팅)하기 - Windows XP

▶▶ 펄/Perl] 숫자 배열 정렬(소팅), sort 함수 사용법: Sort Number Array


숫자 크기순 정렬 도구: ▶▶ 숫자 크기순 정렬 도구, 소트 소팅 툴; Numeric Sort Tool





0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top