[Shell Script] 쉘 스크립트 그누플롯 (Gnuplot) stats 결과를 Fortran/Shell Script으로 읽기

  정보

  • 업무명    : 쉘 스크립트 그누플롯 (Gnuplot) stats 결과를 Fortran/Shell Script으로 읽기

  • 작성자    : 이상호

  • 작성일    : 2019-08-25

  • 설   명    :

  • 수정이력 :

 

 내용

[특징]

  • Gnuplot의 stats 결과를 Fortran에서 용이한 형태로 읽기위한 소프트웨어가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어

 

[기능]

  • Gnuplot 명령어를 통해 통계 결과를 산출 및 저장 (fit)

  • 저장된 파일 (fit)를 Fortran에서 용이한 형태로 읽기

  • 각 통계 정보 (평균, 표준편차 등)에 따라 배열 초기화 및 저장 (fort.99)

  • 저장된 파일 (fort.99)를 ShellScript에서 용이한 형태로 읽기

 

[사용법]

  • 입력 자료 (2012_08.01.dat)를 동일 디렉터리에 저장

  • 소스코드를 실행 (csh Read_Gnuplot_Stats_Result_With_Fortran_ShellScript.csh)

  • 저장 자료 (fit, fort.99) 및 출력 결과를 확인

 

[사용 OS]

  • Linux

 

[사용 언어]

  • ShellScript

  • Fortran

  • Gnuplot

 

 소스 코드

#!/bin/csh
gnuplot << EOF
stats [ : ] [ : ] "2012_08.01.dat" u 6:7
set print 'fit'
stats [ : ] [ : ] "2012_08.01.dat" u 6:7
EOF
cat >! GNU_stat.f90 << EOF
implicit none
character(100) :: ST_Name
real*8, dimension(49) :: ST_Value
integer :: i
open(10,file='fit',status='old')
do i=1,49
read(10,*) ST_Name, ST_Value(i)
enddo
write(99,'(a)') '* FILE'
write(99,'(a,i15)') ' Records: ', int(ST_value(1))
write(99,'(a,i15)') ' Out of range:', int(ST_value(5))
write(99,'(a,i15)') ' Invalid: ', int(ST_value(2))
write(99,'(a,i15)') ' Blank: ', int(ST_value(3))
write(99,'(a,i15)') ' Data Blocks: ', int(ST_value(4))
write(99,'(/,a)') '* COLUMNS'
write(99,'(a,f20.2,f27.2)') ' Mean: ', ST_value(6), ST_value(25)
write(99,'(a,f20.2,f27.2)') ' Std: ', ST_value(7), ST_value(26)
write(99,'(a,f20.2,f27.2)') ' Var: ', ST_value(7)**2.d0, ST_value(26)**2.d0
write(99,'(a,f20.2,f27.2)') ' Skewness:', ST_value(9), ST_value(28)
write(99,'(a,f20.2,f27.2)') ' Kurtosis:', ST_value(10), ST_value(29)
write(99,'(a,f20.2,f27.2)') ' Sum: ', ST_value(12), ST_value(31)
write(99,'(/,a,f21.2,a,i8,a,f15.2,a,i8,a)') &
' Minimum:', ST_value(18), ' [', int(ST_value(23)), ' ]', &
ST_value(37), ' [', int(ST_value(42)), ' ]'
write(99,'(a,f21.2,a,i8,a,f15.2,a,i8,a)') &
' Maximum:', ST_value(22), ' [', int(ST_value(24)), ' ]', &
ST_value(41), ' [', int(ST_value(43)), ' ]'
write(99,'(a,f14.2,f27.2)') ' Quartile(0.25):', ST_value(19), ST_value(38)
write(99,'(a,f14.2,f27.2)') ' Median: ', ST_value(20), ST_value(39)
write(99,'(a,f14.2,f27.2)') ' Quartile(0.75):', ST_value(21), ST_value(40)
write(99,'(/,a,a14,f6.2,a,f7.2)') ' Linear Model:', 'y =',ST_value(44), &
' x +', ST_value(46)
write(99,'(a,f23.2)') ' Slope:', ST_value(44)
write(99,'(a,f20.2)') ' Intercept:', ST_value(46)
write(99,'(a,f17.2)') ' Correlation:', ST_value(48)
write(99,'(a,f14.2)') ' Determination:', ST_value(48)**2.d0
write(99,'(a,f27.2)') ' Sum xy:', ST_value(49)
end
EOF
pgf90 GNU_stat.f90 ; a.out
#@@@@@@@@@@@@@@@@@@ Stats @@@@@@@@@@@@@@@@@@@@@@@@@
set COUNT = `sed -n '2p' fort.99 | awk '{print $2}'`
set Mean_x = `sed -n '9p' fort.99 | awk '{print $2}'`
set Mean_y = `sed -n '9p' fort.99 | awk '{print $3}'`
set Std_x = `sed -n '10p' fort.99 | awk '{print $2}'`
set Std_y = `sed -n '10p' fort.99 | awk '{print $3}'`
set Var_x = `sed -n '11p' fort.99 | awk '{print $2}'`
set Var_y = `sed -n '11p' fort.99 | awk '{print $3}'`
set Skew_x = `sed -n '12p' fort.99 | awk '{print $2}'`
set Skew_y = `sed -n '12p' fort.99 | awk '{print $3}'`
set Kurt_x = `sed -n '13p' fort.99 | awk '{print $2}'`
set Kurt_y = `sed -n '13p' fort.99 | awk '{print $3}'`
set Sum_x = `sed -n '14p' fort.99 | awk '{print $2}'`
set Sum_y = `sed -n '14p' fort.99 | awk '{print $3}'`
set Min_x = `sed -n '16p' fort.99 | awk '{print $2}'`
set Min_y = `sed -n '16p' fort.99 | awk '{print $6}'`
set Max_x = `sed -n '17p' fort.99 | awk '{print $2}'`
set Max_y = `sed -n '17p' fort.99 | awk '{print $6}'`
set IQR_LOW_x = `sed -n '18p' fort.99 | awk '{print $2}'`
set IQR_LOW_y = `sed -n '18p' fort.99 | awk '{print $3}'`
set Med_x = `sed -n '19p' fort.99 | awk '{print $2}'`
set Med_y = `sed -n '19p' fort.99 | awk '{print $3}'`
set IQR_UP_x = `sed -n '20p' fort.99 | awk '{print $2}'`
set IQR_UP_y = `sed -n '20p' fort.99 | awk '{print $3}'`
#@@@@@@@@@@@@@@ Regression @@@@@@@@@@@@@@
set Slope = `sed -n '23p' fort.99 | awk '{print $2}'`
set Inter = `sed -n '24p' fort.99 | awk '{print $2}'`
set Corr = `sed -n '25p' fort.99 | awk '{print $2}'`
set Deter = `sed -n '26p' fort.99 | awk '{print $2}'`
echo 'Count'
echo $COUNT
echo
echo ' Sum Std Var Skew Kurt'
echo $Sum_x' '$Std_x' '$Var_x' '$Skew_x' '$Kurt_x
echo $Sum_y' '$Std_y' '$Var_y' '$Skew_y' '$Kurt_y
echo
echo 'Min IQR(0.25) Mean Med IQR(0.75) Max'
echo $Min_x' '$IQR_LOW_x' '$Mean_x' '$Med_x' '$IQR_UP_x' '$Max_x
echo $Min_y' '$IQR_LOW_y' '$Mean_y' '$Med_y' '$IQR_UP_y' '$Max_y
echo
echo 'Slope Inter Corr Deter'
echo $Slope' '$Inter' '$Corr' '$Deter
rm -f fit fort.99 GNU_stat.f90

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com