Я пытаюсь удалить несколько символов из большого текстового файла (около 1 ГБ). Файл содержит примерно так:удалить несколько символов в большом файле, используя perl
>chr1
NNNNNNNNNNNNN
NNNNNNATGGGGA
NNNNNNNNNNNNN
AGCGTAGGCGACG
>chr2
NNNNNNNNNNNNN
ATGCGTAGCGCAT
NNNNNNNNGCATG
CGATGCTAGctag
cgatcgagcgatg
Я хочу, чтобы получить только характер «ATCG» и хочу объединить все строки, так оно должно выглядеть следующим образом:
ATGGGGAAGCGTAGGCGACGATGCGTAGCGCATGCATGCGATGCTAGCTAGCGATCGAGCGATG
К сожалению, все нежелательному символы были заменены на пробелы так:
ATGGGGA
AGCGTAGGCGACG
ATGCGTAGCGCAT
Я что-то упустил? Это мой код:
open FH, "<", 'filename' or die "Can't open\n"; #read the file
while (my $load = sysread (FH, $temp, 1e+8)) {
warn "Read $load bytes\n";
$temp =~ s/>chr+//gi;
$temp =~ s/\d+//g;
$temp =~ s/n+//gi;
chomp($temp);
$process .= uc($temp);
$temp = '';
}
open (FH, ">", 'newfile') or die "Can't create\n"; #processed string in new file
print FH $process;
close FH;
Заранее благодарен.
Спасибо за ответ. Я не уверен, что вы имеете в виду, прочитав «всю судьбу». Я читаю файл чашкой, так как файл очень большой. Я понимаю, что ваш код способен извлекать только «ATGC». Как насчет «atgc»? Я сожалею, что забыл включить и нижний регистр. – irwan
Да, но вы делаете это через sysread из нескольких байтов, что не похоже на ваши потребности. Я делаю прописные буквы, потому что ваш образец был в верхнем регистре. Если вы хотите снизить также, используйте 's/^ [ATCG] // ig' (и снова используйте' uc') – Sobrique
's/^ [ATCG] // ig' может извлечь все нижние регистры, но это также извлеките 'c' в '> chr1'. Как удалить '> chr1'? – irwan