2012-07-09 205 views
13

所以我有这个程序samtools,我想从cmd行使用,将一个文件转换为另一个。它的工作原理是这样的:从R脚本运行bash脚本

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") Error: unexpected input in "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 
> 

EDIT3: 与获奖者是:

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

'系统()'需要一个字符串作为参数,所以你需要用引号包装你的论点。 – Andrie 2012-07-09 12:43:18

+0

我已经试过了。如上面的编辑所示。 – cianius 2012-07-09 12:47:05

+1

try system(“samtools view filename.bam | awk'{OFS = \”\ t \“; print \”> \“$ 1 \”\ n \“$ 10}' - > filename.fasta”)您需要转义双引号,以便R读取整个命令,而不是只有前两个双引号之间的命令部分 – 2012-07-09 12:50:59

回答

22

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

  1. 与您的字符串
  2. 小心逃避所有的特殊字符创建一个对象x,在这种情况下引号和反斜线
  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 

如果这给正确的字符串,那么你应该能够使用

system(x) 
+0

是的,我需要学习如何自己调试。谢谢Andrie! – cianius 2012-07-09 13:15:38

+1

@Andrie我在名为''test.sh''的''c:/test''文件夹中安装了一个bash脚本。我想用r代码来调用这个bash脚本。我尝试这个''系统'命令,但得到一个错误亲爱的你会帮助我吗? – 2017-02-25 09:28:57