텍스트 파일 정렬에 관한 궁금증 입니다.
100줄 200줄 정도면 몇초 안되서 바로 저장이 되는데요...
600만줄의 자료를 내림차순으로 정렬하니 어제 저녁부터 돌렸는데 아직까지 끝이 안나네요...
제 스크립트가 틀린건 아닌거 같은데... 600만줄의 자료를 돌리는데 너무 많은 시간이 필요한거 같아서...
혹시 아이디어가 있으신 분은 댓글 부탁드립니다. ㅠㅜ
---------------------------------이건 제가 만든 스크립트 입니다-----
텍스트 파일안에 실수 정수 캐릭터가 있어서 일단 자료 속성대로 분류를 했구요
후에 12행에 대한 내림차순 정렬하면서 그에 대한 열도 함께 바뀌는 스크립트입니다.
IMPLICIT NONE
integer :: i, j, n
integer,allocatable :: grade1(:,:)
character(len=14),allocatable :: grade2(:,:)
real*4, allocatable :: grade3(:,:)
integer,allocatable :: grade4(:,:)
real*4, allocatable :: grade5(:,:)
integer,allocatable :: grade6(:,:)
integer,allocatable :: temp1(:,:)
character(len=14),allocatable :: temp2(:,:)
real*4, allocatable :: temp3(:,:)
integer,allocatable :: temp4(:,:)
real*4, allocatable :: temp5(:,:)
integer,allocatable :: temp6(:,:)
n = 0
!---------------------------------------------------------------------------------
open(10,file='/data1/jykim/2Sta/result/txt/Train/rearray/01hr_Train_SPMP.txt',status='old')
open(100,file='/data1/jykim/2Sta/result/txt/Rac/01hr_Train_SPMP_naelim.txt', status='unknown')
!---------------------------------------------------------------------------------
do
read(10,*,end=110)
n=n+1
enddo
110 continue
rewind(10)
write (*,*) "====================================================="
write (*,*) "line=", n
write (*,*) "====================================================="
allocate (grade1(1,n))
allocate (grade2(2:3,n))
allocate (grade3(4:5,n))
allocate (grade4(6:11,n))
allocate (grade5(12:13,n))
allocate (grade6(14:15,n))
allocate (temp1(1,n))
allocate (temp2(2:3,n))
allocate (temp3(4:5,n))
allocate (temp4(6:11,n))
allocate (temp5(12:13,n))
allocate (temp6(14:15,n))
do i= 1, n
read(10,*) grade1(1,i), grade2(2:3,i), grade3(4:5,i), &
&grade4(6:11,i), grade5(12:13,i), grade6(14:15,i)
enddo
do i=1,n-1
do j=i+1, n
if(grade5(12,i).le.grade5(12,j)) then
temp1(1,i)=grade1(1,i)
temp2(2:3,i)=grade2(2:3,i)
temp3(4:5,i)=grade3(4:5,i)
temp4(6:11,i)=grade4(6:11,i)
temp5(12:13,i)=grade5(12:13,i)
temp6(14:15,i)=grade6(14:15,i)
grade1(1,i)=grade1(1,j)
grade2(2:3,i)=grade2(2:3,j)
grade3(4:5,i)=grade3(4:5,j)
grade4(6:11,i)=grade4(6:11,j)
grade5(12:13,i)=grade5(12:13,j)
grade6(14:15,i)=grade6(14:15,j)
grade1(1,j)=temp1(1,i)
grade2(2:3,j)=temp2(2:3,i)
grade3(4:5,j)=temp3(4:5,i)
grade4(6:11,j)=temp4(6:11,i)
grade5(12:13,j)=temp5(12:13,i)
grade6(14:15,j)=temp6(14:15,i)
endif
enddo
enddo
write (*,*) "======WRITING======="
do i = 1, n
write(100,'(i7,2a16,2f14.7,6i7,2f10.2,2i7)') grade1(1,i), grade2(2:3,i),&
& grade3(4:5,i), grade4(6:11,i), grade5(12:13,i), grade6(14:15,i)
end do
댓글 달기