Як рэдагаваць 300 ГБ тэкставага файла (геномныя дадзеныя)?

У мяне ёсць тэкставы файл, 300 ГБ, які змяшчае дадзеныя геномікі з больш 250k запісаў. Ёсць некаторыя запісы з дрэннымі дадзенымі і наша праграма геномікі «Popoolution» дазваляе закаментаваць «дрэнную» запіс са зорачкай. Наша задача складаецца ў тым, што мы не можам знайсці тэкставы рэдактар, які будзе загружаць дадзеныя, каб мы маглі закомментируйте дрэнныя запісу. Любыя прапановы? У нас ёсць і скрынкі для Windows і Linux.

UPDATE: Больш інфармацыі

The program Popoolution (https://code.google.com/p/popoolation/) crashes when it reaches a "bad" record giving us the line number that we can then comment out. Specifically, we get a message from Perl that says "F#€%& Scaffolding". The manual suggests we can just use an asterisk to comment out the bad line. Sadly, we will have to repeat this process many times...

Яшчэ адна думкі ... Ці ёсьць такі падыход, які дазволіў бы нам дадаць зорачку на лінію, не адкрываючы ўвесь тэкставы файл адразу. Гэта можа быць вельмі карысна, улічваючы, што нам прыйдзецца паўтарыць працэс невядомае колькасць разоў.

5
Мы паспрабавалі загрузіць файл у Notepad ++, і спатрэбілася больш за 24 гадзін, каб загрузіць і выкарыстоўваць у асноўным.
дададзена аўтар Keith W. Larson, крыніца
Мы паспрабавалі загрузіць файл у Notepad ++, і спатрэбілася больш за 24 гадзін, каб загрузіць і выкарыстоўваць у асноўным.
дададзена аўтар Keith W. Larson, крыніца
гэта геномікі дадзеныя ... мы ў цяперашні час толькі сячэ на гэтым аспекце біяінфарматыкі. Любыя прапановы вітаюцца!
дададзена аўтар Keith W. Larson, крыніца
гэта геномікі дадзеныя ... мы ў цяперашні час толькі сячэ на гэтым аспекце біяінфарматыкі. Любыя прапановы вітаюцца!
дададзена аўтар Keith W. Larson, крыніца
350,000,000,000 байт з 250000 запісаў складае каля мегабайта PER LINE. Гэта не праца для тэкставага файла. Атрымаць правільную базу дадзеных. Проста кажу.
дададзена аўтар Spacedman, крыніца
350,000,000,000 байт з 250000 запісаў складае каля мегабайта PER LINE. Гэта не праца для тэкставага файла. Атрымаць правільную базу дадзеных. Проста кажу.
дададзена аўтар Spacedman, крыніца
Калі яны з'яўляюцца «запісаў» Я б выказаў здагадку, што дадзеныя ў слупках. Калі файл .txt вы можаце імпартаваць яго ў SQL Server і выконваць запыты, каб ідэнтыфікаваць і абнавіць свае дрэнныя запісу.
дададзена аўтар AxGryndr, крыніца
Калі яны з'яўляюцца «запісаў» Я б выказаў здагадку, што дадзеныя ў слупках. Калі файл .txt вы можаце імпартаваць яго ў SQL Server і выконваць запыты, каб ідэнтыфікаваць і абнавіць свае дрэнныя запісу.
дададзена аўтар AxGryndr, крыніца
Знайсці шаблон для тых дрэнных запісаў і вырашыць праблему з AWK або СЭД, як адзначае @Joshua. 250K запісы павінны быць правераны ўручную ў выглядзе ўсяго жыцця.
дададзена аўтар fedorqui, крыніца
дададзена аўтар fedorqui, крыніца
дададзена аўтар fedorqui, крыніца
ёсць варыянт для Popoolation, ці вы маглі б папрасіць распрацоўшчыкаў разгледзець адзін, што б прапусціць «дрэнныя» лініі, а не завяршэнне? (Вы не можаце сказаць, «збой», распрацоўшчыкі крыўдлівыя аб семантыцы, што шлях ...?)
дададзена аўтар Ben Bolker, крыніца
ёсць варыянт для Popoolation, ці вы маглі б папрасіць распрацоўшчыкаў разгледзець адзін, што б прапусціць «дрэнныя» лініі, а не завяршэнне? (Вы не можаце сказаць, «збой», распрацоўшчыкі крыўдлівыя аб семантыцы, што шлях ...?)
дададзена аўтар Ben Bolker, крыніца
Навошта вам трэба, каб адкрыць яго ў тэкставым рэдактары? Вядома, вы не збіраецеся каментаваць ўсё 250K запісаў ўручную? Паглядзіце на выкарыстанне AWK або СЭД.
дададзена аўтар Joshua Ulrich, крыніца

7 адказы

На аснове вашага абнаўлення:

<�Р> Яшчэ адна думка ... Ці ёсьць такі падыход, які дазволіў бы нам дадаць   зорачка на лінію, не адкрываючы ўвесь тэкставы файл адразу.   Гэта можа быць вельмі карысна, улічваючы, што мы павінны паўтараць   апрацоўваць невядомае колькасць разоў.

Тут у вас ёсць такі падыход: Калі вы ведаеце нумар радка, вы можаце дадаць зорачку ў пачатку гэтага радка прымаўкі:

sed 'LINE_NUMBER s/^/*/' file

Глядзіце прыклад:

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

Калі дадаць -i , файл будзе абноўлены:

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

Хоць я заўсёды думаю, што гэта лепш зрабіць перанакіраванне на іншы файл

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

так што вы захоўваеце некранутымі зыходны файл і захаваць абноўлены адзін у new_file .

11
дададзена

На аснове вашага абнаўлення:

<�Р> Яшчэ адна думка ... Ці ёсьць такі падыход, які дазволіў бы нам дадаць   зорачка на лінію, не адкрываючы ўвесь тэкставы файл адразу.   Гэта можа быць вельмі карысна, улічваючы, што мы павінны паўтараць   апрацоўваць невядомае колькасць разоў.

Тут у вас ёсць такі падыход: Калі вы ведаеце нумар радка, вы можаце дадаць зорачку ў пачатку гэтага радка прымаўкі:

sed 'LINE_NUMBER s/^/*/' file

Глядзіце прыклад:

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

Калі дадаць -i , файл будзе абноўлены:

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

Хоць я заўсёды думаю, што гэта лепш зрабіць перанакіраванне на іншы файл

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

так што вы захоўваеце некранутымі зыходны файл і захаваць абноўлены адзін у new_file .

11
дададзена

Калі патрабуецца, каб чалавек пазначыць гэтыя запісы ўручную з дапамогай тэкставага рэдактара, па якой-небудзь прычыне, вы, верагодна, варта выкарыстоўваць раздваенне , каб разбіць файл на кіраваныя часткі.

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

Гэта дазволіць падзяліць файл на часткі з 100000 радкоў кожная. Імёны файлаў будуць part.0000, part.0001 і г.д. Затым, пасля таго, як усе файлы, якія былі адрэдагаваныя, вы можаце аб'яднаць іх разам з кошка :

cat part.* > new_hugefile.txt
6
дададзена

Самае простае рашэнне складаецца ў выкарыстанні паток-арыентаваны рэдактар, напрыклад SED . Усё, што вам трэба, каб мець магчымасць напісаць адзін ці больш рэгулярны выраз (ы), які будзе ідэнтыфікаваць ўсе (і толькі) дрэнныя запісу. Паколькі вы не падалі ніякіх звестак пра тое, як вызначыць дрэнныя запісу, гэта адзіны магчымы адказ.

4
дададзена
будзе «СЭД» дазваляе паказаць нумар радка і дадаць зорачку? Ці ёсць разлічваць нумар радка як «рэгулярны выраз»?
дададзена аўтар Keith W. Larson, крыніца

Самае простае рашэнне складаецца ў выкарыстанні паток-арыентаваны рэдактар, напрыклад SED . Усё, што вам трэба, каб мець магчымасць напісаць адзін ці больш рэгулярны выраз (ы), які будзе ідэнтыфікаваць ўсе (і толькі) дрэнныя запісу. Паколькі вы не падалі ніякіх звестак пра тое, як вызначыць дрэнныя запісу, гэта адзіны магчымы адказ.

4
дададзена
будзе «СЭД» дазваляе паказаць нумар радка і дадаць зорачку? Ці ёсць разлічваць нумар радка як «рэгулярны выраз»?
дададзена аўтар Keith W. Larson, крыніца

Асноўны ўзор у R, каб счытваць дадзеныя ў кавалках, рэдагаваць, і выпісаць

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 = 
    ## txt[bad] = paste0("*", txt[bad])
    writeLines(txt, fout)
}
close(fin); close(fout)

Хоць не ідэал, гэта працуе на АС Windows (маецца на ўвазе згадваннем Notepad ++) і на мове, які вы меркавана знаёмыя (R). Выкарыстоўваючы (вызначана патч у прылады экспарту ў доўгатэрміновай перспектыве) запатрабуе ўстаноўкі

4
дададзена

Асноўны ўзор у R, каб счытваць дадзеныя ў кавалках, рэдагаваць, і выпісаць

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 = 
    ## txt[bad] = paste0("*", txt[bad])
    writeLines(txt, fout)
}
close(fin); close(fout)

Хоць не ідэал, гэта працуе на АС Windows (маецца на ўвазе згадваннем Notepad ++) і на мове, які вы меркавана знаёмыя (R). Выкарыстоўваючы (вызначана патч у прылады экспарту ў доўгатэрміновай перспектыве) запатрабуе ўстаноўкі

4
дададзена