2014-07-08 41 views
1

我有10個基因型數據的.txt文件 - 每個來自不同的染色體。它們在每一行上都有相同數量的列,並且這些列已經全部以相同的順序排列。每個文件都以相同的第一行開始。連接大型文件沒有他們的首行 - python或bash?

我想要做的是將所有10個文件以chr1,chr2,chr3 ... chr10的順序附加到單個基因型文件中。但是,我想只保留來自chr1的標題行,因此它將保持爲標題,並在將它們全部附加在一起之前從隨後的染色體中移除所有標題。

舉例來說,如果我有:

文件1:

chr, position, geno1, geno2 
1, 100, A, C 
1, 200, G, T 

文件2:

chr, position, geno1, geno2 
2, 50, T, A 
2, 150, C, G 

我想和file_combined結束:

chr, position, geno1, geno2 
1, 100, A, C 
1, 200, G, T 
2, 50, T, A 
2, 150, C, G 

什麼是做到這一點的最佳/最快的方式,考慮到這些文件是每個400-600Mb,結果文件將是〜6Gb?我非常適合編寫Python和Linux shell腳本,但是爲什麼代碼很快並且它正在做什麼會是一個好的解釋!謝謝!

+0

它有多快呢?即這是一個重複的過程,還是你只會做一次? – mgilson

+0

它不會定期重複,儘管我每年都會收到類似大小的數據集。所以不,對於重複而言無關緊要,而且我越早可以更好地開展工作。 – joeshmoe5409

回答

4

你可以評論後做

cp chr1 output 
for f in chr[2-9] chr10; do sed -n '2,$p' $f >> output; done 

更新
事實上,它甚至與尾

cp chr1 output 
tail -qn +2 chr[2-9] chr10 >> output 
+4

或'tail -n +2 $ f' :) – mgilson

2

,最快的方式是不是更加簡便。

例如,如果你打算在這個最終文件送入一個程序,你可以使用:

{ 
    head -n 1 file1 
    for f in file{1..10} 
    do 
    tail -n +2 "$f" 
    done 
} | yourprogram 

這將產生一個流完全像你描述它喂到你的程序,但不會浪費時間寫入文件。

如果你真的想要一個文件,而不是| yourprogram,你可以使用> file。這對於您的少量數據來說已經足夠了。

當您的數據達到TB範圍時,您可以開始考慮跨設備的預分配和並行寫入。

相關問題