2013-06-03 17 views
5

Tôi có một tệp văn bản 300 GB chứa dữ liệu di truyền có hơn 250 nghìn bản ghi. Có một số hồ sơ có dữ liệu xấu và chương trình gen 'Popoolution' của chúng tôi cho phép chúng tôi nhận xét các bản ghi "xấu" có dấu hoa thị. Vấn đề của chúng tôi là chúng tôi không thể tìm thấy một trình soạn thảo văn bản sẽ tải dữ liệu để chúng tôi có thể nhận xét các bản ghi xấu. Bất kỳ đề xuất? Chúng tôi có cả hộp Windows và Linux.Cách chỉnh sửa tệp văn bản 300 GB (dữ liệu genomics)?

UPDATE: Thông tin thêm

Chương trình Popoolution (https://code.google.com/p/popoolation/) bị treo khi nó đạt đến mức kỷ lục "xấu" cho chúng tôi biết số dòng mà sau đó chúng ta có thể nhận xét ra. Cụ thể, chúng tôi nhận được thông báo từ Perl có nội dung "F # €% & Giàn giáo". Hướng dẫn sử dụng cho thấy chúng ta chỉ có thể sử dụng một dấu sao để nhận xét ra dòng xấu. Đáng buồn thay, chúng tôi sẽ phải lặp lại quá trình này nhiều lần ...

Một ý tưởng khác ... Có cách tiếp cận cho phép chúng tôi thêm dấu hoa thị vào dòng mà không mở toàn bộ tệp văn bản cùng một lúc hay không. Điều này có thể rất hữu ích cho rằng chúng tôi sẽ phải lặp lại quá trình một số lần không xác định.

+10

Tại sao bạn cần mở nó trong trình soạn thảo văn bản? Chắc chắn bạn sẽ không bình luận tất cả các bản ghi 250k bằng tay? Nhìn vào sử dụng awk hoặc sed. –

+0

Tìm mẫu cho những bản ghi xấu và giải quyết vấn đề với awk hoặc sed, như @Joshua cho biết. 250k hồ sơ được kiểm tra bằng tay có nghĩa là suốt đời. – fedorqui

+0

Chúng tôi đã cố gắng tải tệp trong Notepad ++ và mất hơn 24 giờ để tải và về cơ bản đã được sử dụng. –

Trả lời

11

Dựa trên bản cập nhật của bạn:

Một ý tưởng khác ... Có cách tiếp cận nào cho phép chúng tôi thêm dấu hoa thị vào dòng mà không cần mở toàn bộ tệp văn bản cùng một lúc hay không. Điều này có thể rất hữu ích khi chúng tôi sẽ phải lặp lại quy trình một số lần không xác định.

Ở đây bạn có một cách tiếp cận: Nếu bạn biết số dòng, bạn có thể thêm một dấu hoa thị vào đầu dòng mà nói:

sed 'LINE_NUMBER s/^/*/' file 

Xem ví dụ:

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

Nếu bạn thêm -i, tệp sẽ được cập nhật:

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

Mặc dù tôi luôn nghĩ rằng nó tốt hơn để làm một chuyển hướng đến một tập tin

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

để bạn giữ nguyên vẹn tập tin ban đầu của bạn và lưu các cập nhật một trong new_file.

4

Giải pháp đơn giản nhất là sử dụng trình chỉnh sửa theo luồng như sed. Tất cả những gì bạn cần là có thể viết một hoặc nhiều (các) cụm từ thông dụng sẽ xác định tất cả (và chỉ) các bản ghi xấu. Vì bạn chưa cung cấp bất kỳ chi tiết nào về cách xác định hồ sơ xấu, đây là câu trả lời duy nhất có thể xảy ra.

+0

sẽ 'sed' cho phép chúng tôi chỉ định số dòng và thêm dấu hoa thị? Số dòng có được tính là "biểu thức chính quy" không? –

6

Nếu bạn được yêu cầu để một người đánh dấu các hồ sơ này theo cách thủ công bằng trình soạn thảo văn bản, vì lý do gì đó, bạn có thể sử dụng split để chia tệp thành các phần có thể quản lý.

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

Điều này sẽ chia nhỏ tệp thành từng phần với 100000 dòng. Tên của các tập tin sẽ được part.0000, part.0001, vv Sau đó, sau khi tất cả các tập tin đã được chỉnh sửa, bạn có thể kết hợp chúng lại với nhau với cat:

cat part.* > new_hugefile.txt 
4

Một mô hình cơ bản trong R là để đọc dữ liệu trong khối, chỉnh sửa và viết ra

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) 

Trong khi không phải lý tưởng, điều này hoạt động trên Windows (ngụ ý bởi đề cập đến Notepad ++) và trong một ngôn ngữ mà bạn có lẽ quen thuộc (R). Sử dụng sed (chắc chắn là công cụ thích hợp trong thời gian dài) sẽ yêu cầu lắp đặt additional software và tăng tốc với sed.

Các vấn đề liên quan