AWK(Ubuntu Linux)의 매개변수를 사용하여 Bash 스크립트에서 R 프로젝트 스크립트 실행

AWK(Ubuntu Linux)의 매개변수를 사용하여 Bash 스크립트에서 R 프로젝트 스크립트 실행

이 코드가 있고 cmd는 일반적으로 sprintf를 사용하면 작동하지만 Rscript를 실행하려고 하면 작동하지 않습니다. 어떤 팁이 있나요?

오류가 발생합니다.

awk: cmd. line:9:         cmd = Rscript ./date-script-r.r $1 3 2 1;
awk: cmd. line:9:                       ^ syntax error
awk: cmd. line:9:         cmd = Rscript ./date-script-r.r $1 3 2 1;
awk: cmd. line:9:                         ^ unterminated regexp

암호:

awk=/usr/bin/awk

awkcommand='
#d is the delimiter
BEGIN { OFS = FS = d }

$1 {
    #Expected args for the Rscript: (1, 2, 3, 4) = (dateString, yearPosition, monthPosition, dayPosition)
    cmd = Rscript ./date-script-r.r $1 3 2 1;
    cmd | getline $1;
    print;
    close(cmd);
}

awk -v d="," "$awkcommand" output-data/$filename > output-data/tmp.csv

R 스크립트 출력 예:

Rscript date-script-r.r 17-12-12 1 2 3
12-12-2017

답변1

바꾸다

cmd = Rscript ./date-script-r.r $1 3 2 1;

통과

cmd = "Rscript ./date-script-r.r " $1 " 3 2 1" ;

복잡한 awk 스크립트의 경우 awk 스크립트 안에 넣는 것이 더 좋습니다.date-awk.awk

$1 {
    #Expected args for the Rscript: (1, 2, 3, 4) = (dateString, yearPosition, monthPosition, dayPosition)
    cmd = "Rscript ./date-script-r.r " "$1" " 3 2 1";
    cmd | getline $1;
    print;
    close(cmd);
}

당신은 전화할 것이다

awk  -F, -f date-awk.awk  output-data/$filename > output-data/tmp.csv

알아채다

  • -F,를 구분 기호로 설정하고 릴레이 변수가 필요하지 않습니다.
  • 이것이 더 큰 계획이나 자습의 일부가 되기를 바랍니다. (쉘이나 awk에서 날짜를 계산하는 더 쉬운 방법이 있습니다).

관련 정보