2012-08-06 10 views
-3

csv數據文件總共爲3.2 GB,上帝知道有多少行和列(假設非常大)。該文件是針對個體羣體的具有SNP數據的基因組學數據。因此,csv文件包含諸如TD102230之類的ID和遺傳數據,例如A/AA/T需要轉換perl中的大csv文件

現在我使用了Text::CSVArray::Transpose模塊,但似乎無法正確(如在計算集羣中凍結)。有沒有特定的模塊可以做到這一點?我是Perl新手(在低級編程方面沒有太多經驗,以前主要使用R和MATLAB),所以對這些詳細的解釋尤其歡迎!

+0

試圖立即加載文件,電腦懲罰我相當苛刻。 – awacs 2012-08-06 17:26:40

回答

0

直接回答,你應該逐行讀取文件中的行,處理他們Text::CSV,與join推和新的價值觀,每個陣列陣列對應於原始列,然後只輸出它們或希望得到原來的轉置表示。在join之後處理每個陣列也將幫助解決記憶問題。

將值寫入到外部文件而不是數組並將它們與OS設施結合是另一種解決內存需求的方法。

你也應該考慮爲什麼你需要這個。是否真的沒有更好的方法來解決手頭的真實任務,因爲轉移本身並沒有真正的目的?

+0

我正在使用另一個程序,它採用一種格式的數據,但我的原始數據是轉置,這就是爲什麼我試圖翻轉數據。 – awacs 2012-08-06 17:27:36

0

將任務分解爲幾個步驟來節省內存。

  1. 讀取一行並將字段寫入以行號命名的文件中。每場輸出一行。
  2. 重複步驟1,直到輸入CSV文件耗盡。
  3. 使用paste將所有輸出文件合併爲一個大文件。
+0

不應該'貓'而不是'粘貼'轉置? – 2012-08-06 17:06:40

+0

這取決於是選擇源文件的縱座標還是橫座標作爲主軸。我測試了我的解決方案更容易編程,並且保證只需要一次輸入即可。 – daxim 2012-08-06 17:09:45

相關問題