通过系统调用使用rtools grep / pipe组合

时间:2019-02-13 02:27:42

标签: r windows

我有一个名为goodfile的文件。可以说内容是

badline
goodline
badline
goodline
badline
badline

在Windows机器上,我想在读取文件之前过滤此文件以仅获取“好行”,以节省内存成本。值得庆幸的是,grep附带了rtools安装,应该可以让我执行此操作。我应该能够做到

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

此错误消息和“更好的文件”不会生成。

如果我使用相同的命令并在命令行上运行它,那么它就可以工作,如果我在Linux机器上的R中用常规的system进行相同的grep调用,那么它就可以工作,所以我看不清楚是什么问题。

我能够找到一种替代的方式来获取文件

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

但仍然好奇为什么管道不起作用

0 个答案:

没有答案