Использование rtools комбинации grep / pipe через системный вызов - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть файл с именем goodfile.Допустим, содержимое:

badline
goodline
badline
goodline
badline
badline

На компьютере с Windows я хочу отфильтровать этот файл, чтобы получить только «goodline» перед чтением, чтобы сэкономить на затратах памяти.К счастью, установка rtools идет с grep, что должно позволить мне это сделать.Я должен быть в состоянии сделать

if(!pkgbuild::has_rtools()){
    stop('install rtools')
}
rtoolsPath = pkgbuild::rtools_path()
grep = file.path(rtoolsPath,'grep.exe')


command = paste(grep, "goodline goodfile")
system(command)

и получить

goodline
goodline

Однако, когда я пытаюсь передать вывод в файл, выполнив

command = paste(grep, "goodline goodfile > betterfile")
system(command)

, я получаю

goodfile:goodline
goodfile:goodline
/usr/bin/grep: >: No such file or directory
/usr/bin/grep: betterfile: No such file or directory

Это сообщение об ошибке и "лучше файл" не генерируется.

Если я беру ту же команду и запускаю ее в командной строке, она просто работает, если я делаю тот же самый вызов system с обычным grep на R на машине linux, она просто работает, так что я могуНе вижу, в чем проблема.

Мне удалось найти альтернативный способ получить файл, выполнив

system2(grep, 
        args = c('goodline','goodfile'),stderr = 'betterfile',stdout = 'betterfile')

, но все же любопытно, почему канал не работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...