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