4

我正在尝试在 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: writing output: broken pipe 用一个短文件可以正常工作。请问我该如何解决这个问题?

谢谢。

4

2 回答 2

7

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

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

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

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

于 2012-07-12T16:37:32.917 回答
2

或者,如果您的实现grep支持它,您可以使用

grep -m 10 PATTERN FILE

部分描述来自:man grep在 Ubuntu 12.04 上

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

这个选项在我遇到类似问题的 Red Hat 5.8 机器上也可用。

于 2012-12-21T19:48:36.080 回答