2013-06-03 16 views
5

Ben 250k üzerinde kayıtları ile genom verileri içeren bir 300 GB metin dosyası var. Kötü veriye sahip bazı kayıtlar ve genomik programımız olan 'Popoolution', yıldız ile "kötü" kayıtları açıklamamıza izin veriyor. Sorunumuz, kötü kayıtları açıklayabilmemiz için verileri yükleyecek bir metin editörü bulamıyoruz. Baska öneri? Hem Windows hem de Linux kutularımız var.300 GB metin dosyası nasıl düzenlenir (genomik veriler)?

GÜNCELLEME: Daha fazla bilgi

bize biz sonra dışarı yorum yapabilirsiniz satır numarasını vererek "kötü" bir rekor ulaştığında programı Popoolution (https://code.google.com/p/popoolation/) çöker. Özellikle, Perl'den "F # €% & İskele" yazan bir mesaj alırız. Elkitabı, kötü çizgiyi yorumlamak için yıldız işaretini kullanabileceğimizi gösteriyor. Ne yazık ki, ... Bu işlemi

Bir daha düşünceyi defalarca tekrarlamak zorunda kalacak ... bize bir kerede tüm metin dosyasını açmadan hattına yıldız işareti eklemek için izin verecek bir yaklaşım var mı. Süreci bilinmeyen bir sayıda tekrarlamak zorunda kalacağımız için bu çok yararlı olabilir.

+10

Neden bir metin düzenleyicisinde açmanız gerekiyor? Şüphesiz, bütün 250 bin kayıtları el ile yorumlamayacak mısın? Awk veya sed kullanarak bak. @Joshua belirtiyor gibi –

+0

Bu kötü kayıtlar için bir desen bulun ve awk veya sed ile sorunu çözmek. Manuel olarak kontrol edilecek 250k kayıtlar bir ömür anlamına gelir. – fedorqui

+0

Dosyayı Notepad ++ 'da yüklemeye çalıştık ve yüklemek 24 saat sürdü ve temelde kullanıldı. –

cevap

11

:

bir daha düşünce ... bize bir kerede tüm metin dosyasını açmadan hattına yıldız işareti eklemek için izin verecek bir yaklaşım var mı. Bu bizim sürecini kez bilinmeyen sayıda tekrarlamak zorunda olacağını verilen çok yararlı olabilir. İşte

bir yaklaşım vardır:

$ cat file 
aa 
bb 
cc 
dd 
ee 
$ sed '3 s/^/*/' file 
aa 
bb 
*cc 
dd 
ee 

:

sed 'LINE_NUMBER s/^/*/' file 

bir örneğe bakın: hattan biliyorsanız, diyerek o satır başında bir yıldız işareti ekleyebilir -i eklerseniz, dosya güncelleştirilir:

$ sed -i '3 s/^/*/' file 
$ cat file 
aa 
bb 
*cc 
dd 
ee 

Hep bozulmamış için orijinal dosyayı tutmak ve new_file güncelleme birini kurtarmak olduğunu

sed '3 s/^/*/' file > new_file 

yüzden başka bir dosyaya bir yeniden yönlendirme yapmak daha iyi olduğunu düşünüyorum rağmen.

4

basit çözüm sed gibi bir akım yönelimli düzenleyici kullanmaktır. İhtiyacınız olan tek şey, tüm (ve sadece) kötü kayıtları tanımlayacak bir veya daha fazla normal ifade (ler) yazabilmektir. Kötü kayıtları nasıl tanımlayacağınızla ilgili hiçbir bilgi vermediğiniz için, bu sadece olası bir cevaptır. Bir kişi herhangi bir nedenle bir metin düzenleyici ile elle bu kayıtları işaretlemek zorunda gerekiyorsa

+0

'sed' satır numarasını belirtmemize ve yıldız işaretini eklememize izin verecek mi? Satır numarası "normal ifade" olarak mı sayılır? –

6

, muhtemelen yönetilebilir parçalar halinde dosya bölmek split kullanmalıdır.

split -a4 -d -l100000 hugefile.txt part. 

Bu

100000 hatları her biriyle parçalara dosyası bölünmüş olacaktır. Dosyaların isimleri tüm dosyaların düzenlendiğine ilişkin sonrasında vb Ardından, cat ile tekrar bir araya birleştirebilirsiniz part.0000, part.0001 olacak: Güncellemenize dayanarak

cat part.* > new_hugefile.txt 
4

Ar temel desen parçalar, düzenleme verileri okumak ve ideal değil, bu (Not Defteri ++ denince ima) Windows üzerinde çalışır iken

fin = file("fin.txt", "r") 
fout = file("fout.txt", "w") 
while (length(txt <- readLines(fin, n=1000000))) { 
    ## txt is now 1000000 lines, add an asterix to problem lines 
    ## bad = <create logical vector indicating bad lines here> 
    ## txt[bad] = paste0("*", txt[bad]) 
    writeLines(txt, fout) 
} 
close(fin); close(fout) 

yazmak ve bir dilde olduğunu Muhtemelen tanıdık geliyorsunuz (R). Sed kullanarak (kesinlikle uzun vadede uygun araç), additional software'un takılmasını ve sed ile hıza ulaşılmasını gerektirecektir.