19

したがって、あるファイルを別のファイルに変換して、cmd ラインから使用したいこのプログラム samtools があります。それはこのように動作します:

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

これを自動化したいので、Rスクリプトを使って自動化したいと思います。system() を使用して OS コマンドを実行できることは知っていますが、試してみても機能しません。

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="\"

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")
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 に答える