在 Bash 脚本中使用 AWK 中的参数运行 R 项目脚本 (Ubuntu Linux)

在 Bash 脚本中使用 AWK 中的参数运行 R 项目脚本 (Ubuntu Linux)

我有这段代码,如果我对其进行 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 中计算日期)。

相关内容