2014-09-29 121 views
0

我有一個.NET程序讀取未知格式的壓縮文件並將數據寫入更大的csv文件。最終,我想在R中對這些數據進行一些分析。現在,我可以提取壓縮數據,然後讀取csv文件,但是有很多數據文件,而且讀取/寫入/讀取速度很慢。現在是提及我實際使用mono在Linux機器上調用此程序的好時機,而且我沒有源代碼。是否有劫持文件的寫入並將其發送到標準輸出或讓它將文件寫入內存而不是磁盤?到目前爲止,我已經用文件描述符嘗試了各種各樣的東西,但沒有成功從文件重定向到標準輸出

編輯:當事情正在運行時,我調用了lsof -p pid。輸出文件描述符爲4u。 u(這顯然意味着讀寫)意味着4> & 1不起作用?

+1

*爲什麼*您是否想擁有輸出在'stdout'而不是CSV格式的文件中?你總是可以創建一個RAM磁盤,在那裏創建輸出的CSV文件,然後'cat'將CSV文件轉換爲'stdout' ... btw。該程序是否允許您指定輸出文件的名稱? – stakx 2014-09-29 20:48:36

+0

該程序不允許我指定輸出文件的名稱。 – brccli 2014-09-29 21:19:42

+0

我希望stdout上的輸出,因爲我可以使用R中的系統命令捕獲調用的輸出,而無需將任何內容寫入磁盤並讀回。 – brccli 2014-09-29 21:21:07

回答

0

按照Linux proc man page,你應該能夠使用下面的文件描述符別名爲標準輸出:

  • /proc/self/fd/1
  • /dev/stdout
+0

如果輸出文件正在以讀寫方式打開(這是根據lsof),我是否可以使用這些別名將輸出發送到標準輸出?我已經嘗試用4>&1調用命令,我認爲它會起作用。現在我擔心讀/寫狀態會阻止我做我想做的事。 – brccli 2014-09-29 21:25:05

+0

你從哪裏閱讀過關於這個'4>&1'的文章?我第一次聽說它。而且,如果您無法指定輸出文件名,那麼我的答案將無法工作 - 只有在您可以指定輸出文件的名稱時纔有效。 – 2014-09-30 07:40:03

+0

下面是一個關於重定向和描述文件描述符的網站:http://www.tldp.org/LDP/abs/html/io-redirection.html。文件描述符0,1,2是stdin,stdout和stderr。文件描述符3-9按順序引用下一個文件。在我的情況下,3表示正在讀取的壓縮文件,4表示正在寫入的文件。我認爲在命令應該將正在寫入的文件重定向到stdout後添加4>&1,但它不起作用,可能是因爲該文件已被打開以供讀取和寫入。 – brccli 2014-09-30 17:07:05

相關問題