【问题标题】:Run a bash script from an R script从 R 脚本运行 bash 脚本
【发布时间】:2012-07-09 12:40:49
【问题描述】:

所以我有这个程序 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 查看文件名.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
> 

编辑3: 获胜者是:

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

【问题讨论】:

  • system() 将字符串作为参数,因此您需要将参数用引号括起来。
  • 我已经尝试过了。如上所示编辑。
  • try system("samtools view filename.bam | awk '{OFS=\"\t\"; print \">\"$1\"\n\"$10}' -> 文件名。 fasta") 您需要转义双引号,以便 R 读取整个命令,而不仅仅是前两个双引号之间的命令部分
  • EDIT2:表明您的建议不起作用。转义 awk 正则表达式中的所有引号会使其无法正常工作。
  • 你不也能避开反斜杠吗? system("samtools view filename.bam | awk '{OFS=\"\\t\"; print \">\"$1\"\\n\"$10}' -> filename.fasta")

标签: r bash


【解决方案1】:

调试方法是使用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 我在"c:/test" 文件夹中有一个安全的bash 脚本,名称为test.sh。我想在 r 代码中调用这个 bash 脚本。我尝试了这个system 命令,但出现错误亲爱的你能帮帮我吗?
猜你喜欢
  • 2017-11-04
  • 2017-06-10
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2013-03-14
  • 2011-05-10
  • 2013-06-24
  • 2021-07-19
相关资源
最近更新 更多