정보
-
업무명 : 쉘 스크립트 날짜 기간에 대한 파일 조회 및 일별 통계 생산
-
작성자 : 이상호
-
작성일 : 2021-01-06
-
설 명 :
-
수정이력 :
내용
[개요]
-
안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.
-
오늘 포스팅에서는 날짜 기간에 대한 파일 조회 및 일별 통계 생산을 소개합니다.
[특징]
-
리눅스에서 일별 통계 생산을 하기 위해서 쉘 스크립트 기술이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어
[기능]
-
날짜 기간에 파일 조회
-
일별 통계 생산
[활용 자료]
- 없음
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
소스 코드 참조
[사용 OS]
-
Linux (CentOS v7.3)
-
VMware Workstation Pro v15.5
[사용 언어]
-
ShellScript (csh)
소스 코드
-
소스 코드는 단계별로 수행하며 상세 설명은 다음과 같습니다.
-
작업 환경의 경우 수행 쉘, 파일 조회 경로, 일별 통계, 로그 파일로 구성되어 있습니다.
디렉터리명 | 파일명 | |
작업 경로 | prjDir=/SYSTEM/TEST/DataCountCheck | |
수행 쉘 | ${prjDir} | RunShell-DataCountCheck.csh |
파일 조회 경로 | /DATA/IMG/DAILY | *%Y%m%d%H%M*_*-*_*.mp4 |
일별 통계 | ${prjDir} | Stat_Result.log |
로그 파일 | ${prjDir} | Execution.log (실행 로그) Error.log (에러 로그) |
[명세]
-
[1 단계] 수행 쉘 실행 및 시작/종료 시간에 대한 반복문 수행
-
csh RunShell-DataCountCheck.csh 명령어를 통해 쉘 실행
-
시작 날짜 (srtDateTime) 및 종료 날짜 (endDateTime)를 이용해서 유닉스 시간 (dtSrtUnix, dtIncUnix, dtEndUnix)으로 변환
-
1일 간격으로 시작/종료에 대한 반복문 수행
-
#!/bin/csh
set srtDateTime = "2020-07-01 00:00"
set endDateTime = "2020-10-01 00:00"
set dtSrtUnix = `date -d "${srtDateTime}" +%s`
set dtEndUnix = `date -d "${endDateTime}" +%s`
set dtIncUnix = $dtSrtUnix
while ($dtIncUnix < $dtEndUnix)
...
end
-
[2 단계] 날짜 재 변환 및 파일 조회
-
date 명령어를 통해 유닉스 시간을 년 (sYear), 월 (sMonth), 일 (sDay), 년월일 (dtYmd)로 재 변환
-
find 명령어를 통해 날짜에 대한 파일 조회 목록 (fileList) 저장
-
set sYear = `date +"%Y" -d @$dtIncUnix`
set sMonth = `date +"%m" -d @$dtIncUnix`
set sDay = `date +"%d" -d @$dtIncUnix`
set dtYmd = `date +"%Y%m%d" -d @$dtIncUnix`
set iCount = 0
@ dtIncUnix = `date -d "${sYear}${sMonth}${sDay} 1 days" +%s`
set fileList = `find /DATA/IMG/DAILY -name "*${dtYmd}*_*-*_*.mp4"`
-
[3 단계] 조회 목록에 따른 분기 처리
-
파일 조회 목록이 없을 경우 일별 통계, 실행/에러 로그 기록 후 반복문 건너뛰기
-
반면에 있을 경우 foreach 명령어를 통해 파일 정보를 실행 로그 (Execution.log)에 기록 그리고 일별 통계 (Stat_Result.log) 기록
-
if (${#fileList} < 1) then
echo [`date "+%Y/%m/%d %T"`] $sYear $sMonth $sDay $iCount >> Stat_Result.log
echo [`date "+%Y/%m/%d %T"`] $dtYmd "F" >> Execution.log
echo [`date "+%Y/%m/%d %T"`] $dtYmd "F" "find /DATA/IMG/DAILY -name *${dtYmd}*_*-*_*.mp4" >> Error.log
continue
endif
foreach sDirFile ($fileList)
@ iCount++
echo [`date "+%Y/%m/%d %T"`] $dtYmd "S" $sDirFile:h $sDirFile:t >> Execution.log
end
echo [`date "+%Y/%m/%d %T"`] $sYear $sMonth $sDay $iCount >> Stat_Result.log
-
Stat_Result.log
-
Execution.log
-
Error.log
[전체]
-
RunShell-DataCountCheck.csh
#!/bin/csh
set srtDateTime = "2020-07-01 00:00"
set endDateTime = "2020-10-01 00:00"
set dtSrtUnix = `date -d "${srtDateTime}" +%s`
set dtEndUnix = `date -d "${endDateTime}" +%s`
set dtIncUnix = $dtSrtUnix
while ($dtIncUnix < $dtEndUnix)
set sYear = `date +"%Y" -d @$dtIncUnix`
set sMonth = `date +"%m" -d @$dtIncUnix`
set sDay = `date +"%d" -d @$dtIncUnix`
set dtYmd = `date +"%Y%m%d" -d @$dtIncUnix`
set iCount = 0
@ dtIncUnix = `date -d "${sYear}${sMonth}${sDay} 1 days" +%s`
set fileList = `find /DATA/IMG/DAILY -name "*${dtYmd}*_*-*_*.mp4"`
if (${#fileList} < 1) then
echo [`date "+%Y/%m/%d %T"`] $sYear $sMonth $sDay $iCount >> Stat_Result.log
echo [`date "+%Y/%m/%d %T"`] $dtYmd "F" >> Execution.log
echo [`date "+%Y/%m/%d %T"`] $dtYmd "F" "find /DATA/IMG/DAILY -name *${dtYmd}*_*-*_*.mp4" >> Error.log
continue
endif
foreach sDirFile ($fileList)
@ iCount++
echo [`date "+%Y/%m/%d %T"`] $dtYmd "S" $sDirFile:h $sDirFile:t >> Execution.log
end
echo [`date "+%Y/%m/%d %T"`] $sYear $sMonth $sDay $iCount >> Stat_Result.log
end
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'프로그래밍 언어 > Shell Script' 카테고리의 다른 글
[ShellScript] 쉘 스크립트 스케쥴링을 위한 크론탭 (crontab) 설정 (0) | 2021.01.17 |
---|---|
[ShellScript] 쉘 스크립트 국/영문 번역 파일을 이용하여 이미지 및 동영상 제작 (0) | 2021.01.07 |
[ShellScript] 쉘 스크립트 UTC 시간에 대한 파일을 이용한 KST 시간 변환 (0) | 2021.01.03 |
[ShellScript] 쉘 스크립트 사용법 (배열을 사용하는 법) (1) | 2020.07.18 |
[ShellScript] 쉘 스크립트 사용법 (변수를 사용하는 법) (2) | 2020.07.17 |
최근댓글