从R脚本运行bash脚本

cia*_*ius 15 bash r

所以我有这个程序samtools我想从cmd行使用,将一个文件转换为另一个文件.它的工作原理如下:

bash-4.2$ samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta
Run Code Online (Sandbox Code Playgroud)

因为我想自动化这个,我想通过使用R脚本自动化它.我知道你可以使用system()来运行操作系统命令,但是我无法通过尝试来实现它

system(samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta)
Run Code Online (Sandbox Code Playgroud)

是否只是使用正则表达式来摆脱空格和东西,所以逗号参数系统(命令)是可读的?我该怎么做呢?

编辑:

system("samtools view filename.bam | awk'{OFS ="\ t"; print">"$ 1"\n"$ 10}" - > first_batch_1.fasta")错误:"system("samtools view filename)中的意外输入.bam | awk'{OFS ="\"

EDIT2:

system("samtools view filename.bam | awk'{OFS = \"\ t \"; print \"> \"$ 1 \"\n \"$ 10}' - > filename.fasta")

awk: cmd. line:1: {OFS="    "; print ">"$1"
awk: cmd. line:1:                         ^ unterminated string
awk: cmd. line:1: {OFS="    "; print ">"$1"
awk: cmd. line:1:                         ^ syntax error
> 
Run Code Online (Sandbox Code Playgroud)

编辑3:获胜者是:

system("samtools view filename.bam | awk '{OFS=\"\\t\"; print \">\"$1\"\\n\"$10}' -> filename.fasta")
Run Code Online (Sandbox Code Playgroud)

And*_*rie 24

调试方法是用来cat测试你的字符串是否已被正确转义.所以:

  1. x使用您的字符串创建一个对象
  2. 小心地逃避所有特殊字符,在这种情况下引号和反斜杠
  3. 使用cat(x)检查结果字符串.

例如:

x <- 'samtools view filename.bam | awk \'{OFS="\\t"; print ">"$1"\\n"$10}\' - > filename.fasta'

cat(x)
samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta
Run Code Online (Sandbox Code Playgroud)

如果这给出了正确的字符串,那么你应该可以使用

system(x)
Run Code Online (Sandbox Code Playgroud)

  • @Andrie我在`"c:/test"`文件夹中有一个安全的bash脚本,名称为`test.sh`。我想在 r 代码中调用这个 bash 脚本。我尝试这个“system”命令,但出现错误,亲爱的,你能帮助我吗? (2认同)