정보
-
업무명 : 쉘 스크립트 그누플롯 (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
소스 코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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
'프로그래밍 언어 > Shell Script' 카테고리의 다른 글
[ShellScript] 쉘 스크립트 sed 문자열 치환 시 "echo" 대신 "Here String (<<<)" 사용 방법 (2) | 2020.01.19 |
---|---|
[Shell Script] 쉘 스크립트 템플릿 파일에서 변수 확장 방법 (0) | 2020.01.19 |
[Shell Script] 쉘 스크립트 기초 (0) | 2019.08.28 |
[Shell Script] 쉘 스크립트 분광반응함수를 이용한 각 채널별 파장 및 파수에 따른 반응도 특성 분석 (0) | 2019.08.25 |
[Shell Script] 쉘 스크립트 복사 전달 모수화 모델의 투과율 계산을 위한 온도보정 계수 산출 (0) | 2019.08.25 |