我有这段代码,如果我对其进行 sprintf 操作,cmd 通常可以工作,但是当我尝试运行 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,
将设置 , 作为分隔符,不需要中继变量。- 我希望这是一个更大的计划或自我教程的一部分。 (有更简单的方法在 shell 或 awk 中计算日期)。