从R脚本运行bash脚本

时间:2012-07-09 12:40:49

标签: r bash

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

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

由于我想自动执行此操作,因此我希望使用R脚本自动执行此操作。我知道您可以使用system()来运行操作系统命令,但我无法通过尝试

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

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

编辑:

  

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 \”&gt; \“$ 1 \”\ n \“$ 10}' - &gt; filename.fasta”)< / p>

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
> 

EDIT3: 获胜者是:

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

1 个答案:

答案 0 :(得分:24)

调试方法是使用cat来测试您的字符串是否已正确转义。所以:

  1. 使用字符串
  2. 创建对象x
  3. 小心地转义所有特殊字符,在本例中为引号和反斜杠
  4. 使用cat(x)检查生成的字符串。
  5. 例如:

    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
    

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

    system(x)