2013-06-03 2 views
5

私は250K以上のレコードを持つゲノミクスデータを含む300 GBのテキストファイルを持っています。悪いデータを持つレコードがいくつかあり、私たちのゲノムプログラム 'Popoolution'はアスタリスクで「悪い」レコードをコメントアウトすることができます。私たちの問題は、悪いレコードをコメントにするためにデータをロードするテキストエディタが見つからないということです。助言がありますか?私たちはWindowsとLinuxの両方のボックスを持っています。300 GBのテキストファイル(ゲノミクスデータ)の編集方法は?

UPDATE:詳しい情報

それは私たちがその後、コメントアウトすることができます行番号を与える「悪い」の記録に到達したときにプログラムPopoolution(https://code.google.com/p/popoolation/)がクラッシュ。具体的には、Perlから "F#€%&足場"というメッセージが表示されます。このマニュアルでは、アスタリスクを使用して悪い行をコメントアウトすることができます。悲しいことに、このプロセスを何度も繰り返す必要があります...

もう1つの考え方...テキストファイル全体を一度に開くことなく、アスタリスクを行に追加できる方法はありますか?これは、プロセスを未知数回繰り返さなければならないので、非常に便利です。

+10

なぜそれをテキストエディタで開く必要がありますか?確かに250kのレコードをすべて手書きでコメントするつもりはないのですか? awkやsedを使ってみてください。 –

+0

@Joshuaが示すように、それらの不良レコードのパターンを見つけ、awkまたはsedの問題を解決します。手動でチェックされる250KBのレコードは、生涯を意味します。 – fedorqui

+0

私たちはNotepad ++でファイルを読み込もうとしましたが、読み込むのに24時間以上かかりました。 –

答えて

11

もう1つの考え方... アスタリスクを行に追加する方法はありますか?テキストファイル全体を一度に開くことはできません。 これは、 プロセスを不明確な回数繰り返す必要があるため、非常に便利です。ここで

あなたはアプローチを持っている:

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

sed 'LINE_NUMBER s/^/*/' file 

は、例を参照してください:あなたは行番号を知っている場合は、あなたが言ってその行の先頭にアスタリスクを追加することができます-iを追加すると、ファイルは更新されます:

$ sed -i '3 s/^/*/' file 
$ cat file 
aa 
bb 
*cc 
dd 
ee 
私はいつもそれがリダイレクトを行う方が良いと思うにもかかわらず

別のファイルへ

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

あなたは、元のファイルそのまま維持し、new_file内の更新1を保存するようにします。

4

最も簡単な解決策は、sedなどのストリーム指向のエディタを使用することです。必要なのは、すべての(そして唯一の)不良レコードを特定する1つ以上の正規表現を書くことだけです。あなたが悪い記録を特定する方法の詳細を提供していないので、これが唯一可能な答えです。

+0

は、行番号を指定してアスタリスクを追加することを許可しますか?行番号は「正規表現」としてカウントされますか? –

6

これらのレコードをテキストエディタで手動でマークする必要がある場合は、何らかの理由でsplitを使用してファイルを管理可能な部分に分割する必要があります。

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

これはファイルをそれぞれ100000行ずつ分割します。ファイルの名前は、すべてのファイルが編集された後などは、その後、あなたはcatと一緒に戻ってそれらを組み合わせることができpart.0000、part.0001、次のようになりますあなたの更新に基づいて

cat part.* > new_hugefile.txt 
4

Rでの基本的なパターンは、チャンク内のデータを読み、編集、および、これは、Windows(メモ帳++の言及によって暗示)にし、その言語で理想的ではない動作しますが

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) 

を書き出すことですあなたはおそらくおなじみです(R)。 sed(長期的には適切なツールです)を使用するには、additional softwareのインストールが必要で、sedの速度が上がります。

関連する問題