我正在尝试在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:写输出:断管 使用短文件它可以正常工作。 我该如何工作呢?
感谢。
答案 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盒子上也有这个选项,我遇到了类似的问题。