在R中管道两个bash命令:管道错误

时间:2012-07-12 14:40:49

标签: r bash pipe

我正在尝试在R中管道两个bash命令,但是我得到了一个损坏的管道错误;任何建议表示赞赏。 我就在这里:

#Create a long file (2GB on your drive...)
write.csv(rep(1,1E8),file="long.txt", row.names=FALSE)

system("grep 1 tmp.txt")    #This works
system("grep 1 tmp.txt| head -n 10")    #This gives a broken pipe error

我得到grep:写输出:断管 使用短文件它可以正常工作。 我该如何工作呢?

感谢。

2 个答案:

答案 0 :(得分:6)

grep正在抱怨,因为它的产出超过了10行,而head在它完成之前将其切断。

我建议隐藏grep的stderr输出(这是打印管道错误的地方)。

system("grep 1 tmp.txt 2>/dev/null | head -n 10")

如果您需要查看grep中的其他错误,这将无效;在这种情况下,您将需要一个更复杂的解决方案。

答案 1 :(得分:2)

或者,如果grep的实施支持,则可以使用

grep -m 10 PATTERN FILE

部分说明:来自Ubuntu 12.04上的man grep

-m NUM, --max-count=NUM
      Stop reading a file after NUM matching lines.

我的Red Hat 5.8盒子上也有这个选项,我遇到了类似的问题。