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から日付を計算するより簡単な方法があります)。

おすすめ記事