从R脚本中运行一个bash脚本

21

我有一个叫做samtools的程序,想要通过命令行使用它将一个文件转换为另一个文件。它的使用方式如下:

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(command)可读?我该如何做到这一点?

编辑:

system(“samtools view filename.bam | awk'{OFS =\"\\t \";print \">\"$1\"\\n\"$10}' - > first_batch_1.fasta“) 错误:在” system(“samtools view filename.bam | awk '{OFS="\"

编辑2:

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
> 

编辑3:获胜者是:

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

1
system()函数需要一个字符字符串作为参数,因此您需要将参数用引号括起来。 - Andrie
我已经尝试过了。如上所述的编辑。 - cianius
1
尝试运行以下命令:system("samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta")。你需要转义双引号,以便R可以读取整个命令,而不仅仅是在第一个双引号之间的命令部分。 - Mischa Vreeburg
EDIT2:显示您的建议不起作用。在awk正则表达式中转义所有引号会使其无法正常工作。 - cianius
1
你不应该也对反斜杠进行转义吗? system("samtools view filename.bam | awk '{OFS=\"\\t\"; print \">\"$1\"\\n\"$10}' -> filename.fasta") - plannapus
你说你想要从命令行使用samtools,Andrie的回答似乎是正确的。或者,你可以使用两个samtools的包装器:rbamtoolsRsamtools - Paolo
1个回答

31

调试方法是使用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

如果这个字符串是正确的,那么你应该可以使用。
system(x)

是的,我需要学习如何自己调试。谢谢Andrie! - cianius
1
@Andrie,我在"c:/test"文件夹中有一个名为test.sh的Bash脚本。我想在R代码中调用这个Bash脚本。我尝试使用system命令,但是出现了错误。亲爱的,你能帮我吗? - Muhammad Usman Saleem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接