Executando o script do projeto R com argumentos dentro do AWK em um script Bash (Ubuntu Linux)

1

Eu tenho este código onde o cmd geralmente funciona se eu sprintf algo para ele, mas quando tento executar o meu Rscript, ele não funciona. Alguma dica?

Eu recebo o erro:

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

Código:

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

Exemplo de saída do script R:

Rscript date-script-r.r 17-12-12 1 2 3
12-12-2017
    
por Grzegorz Nowak 04.03.2017 / 08:56

1 resposta

2

substituir

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

por

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

para o script awk complexo, talvez seja melhor colocá-los em um script do awk, por exemplo 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);
}

que você ligaria com

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

observe que

  • -F, será definido, como separador, não há necessidade de uma variável de relé.
  • Espero que isso seja parte de um esquema maior ou de um tutorial próprio. (há uma maneira mais fácil de calcular a data no shell ou no awk).
por 04.03.2017 / 09:10

Tags