19

所以我有这个程序 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="\"

编辑2:

system("samtools 查看文件名.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")
4

1 回答 1

30

调试的方法是用来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)
于 2012-07-09T13:00:31.150 回答