Search

레이블이 Bash인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Bash인 게시물을 표시합니다. 모든 게시물 표시

2019년 4월 23일 화요일

[R] [bash] bash에서 argument(인자)를 받아 R script내 변수로 활용하기

#1. 들어가기

R script를 모두 작성한 이후, batch작업 등을 통해 시스템적으로 반복적인 작업을 해야할 때가 있다.
이럴 경우 shell 창 자체에서 argument를 설정하여 script 내부의 변수로 활용할 수 있다.


#2. 코드

* R script 내부 ( test.R )
# bash에서 argument를 받아, args 변수에 저장
args = commandArgs(trailingOnly=TRUE)

# args에 저장된 내용 프린트
print(paste("test args :", args))

* shell 에서 명령
Rscript test.R thisIsTest


* 결과 화면








#3. 추가

보통은 일/월 별 특정 날짜에 배치작업을 수행하는 목적으로 많이 사용하는데, 아래의 코드로 server의 시스템 날짜를 바로 가져와서 활용할 수 있다.
#Set this month 'YYYYMM'
curr_month <- format(Sys.time(), "%Y%m")   # server의 시스템 날짜를 가져와 입력
print(curr_month)

2017년 1월 8일 일요일

[Bash] 파라미터를 받아서 특정 문자를 기준으로 자르기. (parameter split)

#1. 들어가기
bash shell을 이용해 batch작업을 짜다보면 파라미터로 받은 값을 처리하고 싶을 때가 있다.
예를들어, 파라미터로 --yyyymm=201701 이라는 값을 받았을 때, '='을 기준으로 좌,우의 값을 분리하여 사용이 필요할 때가 있다.


#2. bash에서 파라미터 값 자르기
아래와 같은 쉘 스크립트(test.sh)를 하나 만들어서 파라미터를 넣어 실행해보자.
test.sh 코드
input=$1
echo ${input##*=}
echo ${input%%=*}

실행.
[martin@OSKAR01 ~]$ sh test.sh --yyyymm=201701

파라미터로 넣은 --yyyymm=201701이 --yyyymm과 201701로 분리된 것을 볼 수 있다.
간단하게 설명하면 다음과 같다.

#*=   는 문자열의 좌측부터 시작해 맨 처음으로 찾은 =까지의 모든 문자를 제거한다.
##*= 는 문자열의 좌측부터 시작해 맨 마지막으로 찾은 =까지의 모든 문자를 제거한다.
%=*   는 문자열의 우측부터 시작해 맨 처음으로 찾은 =까지의 모든 문자를 제거한다.
%%=* 는 문자열의 우측부터 시작해 맨 마지막으로 찾은 =까지의 모든 문자를 제거한다.

자세한 설명은 아래의 사이트를 참조하자.
http://wiki.bash-hackers.org/syntax/pe