我正在建立一个目录结构,其中包含许多不同的R&bash脚本。它们都将引用文件和文件夹。与其对路径进行硬编码,我希望有一个文本文件,其中每个脚本都可以在文件中搜索描述符(请参见下文)并从中读取相关路径。
对我来说,让搜索附件在R中工作很容易;由于我不太了解该语言,因此无法在Bash中使用它。
我的猜测是它与awk
工作/存储变量的方式有关,或者/
与awk输出的工作方式有关。但是我对它还不够熟悉,非常感谢您的帮助
NOT_DIRECTORY "/file/paths/Fake"
JOB_TEST_DIRECTORY "/file/paths/Real"
ALSO_NOT_DIRECTORY "/file/paths/Fake"
#! /bin/bash
master_file_name="Master_File.txt"
R_SCRIPT="RScript.R"
SRCPATH=$(awk '/JOB_TEST_DIRECTORY/ { print $2 }' $master_file_name)
Rscript --vanilla $SRCPATH/$R_SCRIPT
最后一行$SRCPATH/$R_SCRIPT
似乎SRCPath
用的名称代替了的名称,$R_SCRIPT
该名称的输出类似于/RScript.Rs/Real
而不是我想要的名称/file/paths/Real/RScript.R
。
注意:如果我对路径path="/file/paths/Real"
进行硬编码,那么代码将$path/$R_SCRIPT
输出我想要的内容。
system(command = "echo \"SUCCESSFUL_RUN\"", intern = FALSE, wait = TRUE)
q("no")
请让我知道是否还有其他有用的信息,我添加了所有我能想到的信息。谢谢你
我找到了两种解决方案。
[请参阅下面的答案]
在看到Mehni关于忽略"
引号的注释后,我查找了更多内容,发现可以更改awk
用于确定文本分隔位置的字符。通过将a添加-F\"
到awk
呼叫中,它会根据"
字符成功分离。
以下作品
#!/bin/bash
master_file_name="Master_File.txt"
R_SCRIPT="RScript.R"
SRCPATH=$(awk -F\" -v r_script=$R_SCRIPT '/JOB_TEST_DIRECTORY/ { print $2 }' $master_file_name)
Rscript --vanilla $SRCPATH/$R_SCRIPT
非常感谢大家花时间帮助我。对此,我真的非常感激。
问题是由于路径两边的引号引起的,对awk
命令的此更改在打印路径时将其忽略。
如@david所述,shebang行中还有一个不应存在的空间
#!/bin/bash
master_file_name="/tmp/data"
R_SCRIPT="RScript.R"
SRCPATH=$(awk '/JOB_TEST_DIRECTORY/ { if(NR==2) { gsub("\"",""); print $2 } }' "$master_file_name")
echo "$SRCPATH/$R_SCRIPT"
输出
[1] "Hello World!"
在我的示例中,路径在 /tmp/data
NOT_DIRECTORY "/tmp/file/paths/Fake"
JOB_TEST_DIRECTORY "/tmp/file/paths/Real"
ALSO_NOT_DIRECTORY "/tmp/file/paths/Fake"
并在与JOB_TEST_DIRECTORY
我相对应的路径中有一个简单的hello_world R脚本
[user@host tmp]$ cat /tmp/file/paths/Real/RScript.R
print("Hello World!")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句