Thursday, December 07, 2006
윈도우 SORT 명령, 숫자 크기순 정렬(소팅) 문제 해결, Perl(펄)로
MS윈도우의 "도스창(정식 명칭은 '명령 프롬프트';CMD.EXE)"에서의 SORT 명령은, 숫자를 소팅할 수 없는 문제가 있습니다.
만약 숫자로 이루어진 파일을 소팅하면, 숫자 크기 순으로 소트되지 않고, 맨 앞의 숫자의 아스키 코드 순서대로 나와 버립니다. 그래서 뒤죽박죽이 되고, 정렬이 되지 않습니다.
그래서 펄을 사용하여, 숫자 크기순으로 소팅할 수 있는 프로그램을 만들었습니다. 액티브펄(ActivePerl)을 무료로 다운로드 받아서 윈도우에 설치한 후 실행하면 됩니다.
아래 박스의 내용이 숫자 파일 정렬하는 펄 소스입니다.
파일명: sortNum.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
sortNum.pl 0.txt
이렇게 펄스크립트 파일명 뒤에, 소팅할 파일을 지정합니다. 내용이 숫자들로만 이루어진 텍스트 파일이어야 합니다.
앞뒤로 공백이 있어도 자동으로 제거해 줍니다. 다음의 테스트용 파일의 경우 앞뒤로 지저분한 공백이 있습니다. (다만, 이 블로그에 포스팅하는 과정에서 뒤쪽 공백들이 사라졌습니다)
테스트용으로 사용할 파일: 0.txt
실행 결과:
위와 같이, 숫자 크기순으로 깨끗이 정렬되었습니다. 앞뒤의 공백도 자동으로 제거되었습니다.
정렬 결과는 화면에 출력되는데, 결과를 파일로 저장하기 위해서는
sortNum.pl 0.txt > out.txt
이렇게 재지향(Redirection)을 하면, 화면 출력 결과가 하드에 out.txt 라는 이름의 파일로서 저장됩니다.
참고:
윈도우의 sort 명령으로 숫자 파일을 정렬했을 때의 오류 예시:
다음의 첫번째 경우(하얀색 글자들)처럼 공백과 빈 줄이 섞여 나오기도 하지만, 공백과 빈 줄들을 다 제거해도
두번째 경우(빨간색 글자들)에서 보는 것과 마찬가지로, 숫자 크기순으로 나오지 않습니다.
▶▶ 윈도우] SORT 명령 사용법, 문자열/텍스트파일 정렬(소팅)하기 - Windows XP
▶▶ 펄/Perl] 숫자 배열 정렬(소팅), sort 함수 사용법: Sort Number Array
숫자 크기순 정렬 도구 ( 웹브라우저에서 ): ▶▶ 숫자 크기순 정렬 도구, 소트 소팅 툴; Numeric Sort Tool
만약 숫자로 이루어진 파일을 소팅하면, 숫자 크기 순으로 소트되지 않고, 맨 앞의 숫자의 아스키 코드 순서대로 나와 버립니다. 그래서 뒤죽박죽이 되고, 정렬이 되지 않습니다.
그래서 펄을 사용하여, 숫자 크기순으로 소팅할 수 있는 프로그램을 만들었습니다. 액티브펄(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 (@_); # 화면에 결과 출력
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
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>
-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)을 하면, 화면 출력 결과가 하드에 out.txt 라는 이름의 파일로서 저장됩니다.
참고:
윈도우의 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>
-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
tag: windows
윈도우 | Windows 7 | Windows XP | Windows 2000
tag: perl
Perl | 펄
tag: batch
배치파일 | DOS CMD BATCH .BAT
<< Home