4

R で 2 つの 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 grepUbuntu12.04上

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

このオプションは、同様の問題が発生していたRedHat5.8ボックスでも使用できました。

于 2012-12-21T19:48:36.080 に答える