Запустите bash script из R script
Итак, у меня есть эта программа samtools, которую я хочу использовать из строки cmd, конвертируя один файл в другой. Он работает следующим образом:
bash-4.2$ samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta
Как я хочу автоматизировать это, я хотел бы автоматизировать его с помощью R script. Я знаю, что вы можете использовать system() для запуска команды ОС, но я не могу заставить ее работать, попробовав
system(samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta)
Это просто вопрос использования регулярных выражений, чтобы избавиться от пробелов и т.д., чтобы система запятой (команда) читалась? Как мне это сделать?
EDIT:
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")
Ответы
Ответ 1
Чтобы отладить это, нужно использовать cat
для проверки правильности экранирования вашей символьной строки. Итак:
- Создайте объект
x
со своей строкой
- Осторожно избегайте всех специальных символов, в этом случае кавычки и обратные косые черты
- Используйте
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)