이 코드가 있고 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에서 날짜를 계산하는 더 쉬운 방법이 있습니다).