Разделение крупного текста регистрирует каждый x шаблон повторения

Я пытаюсь разделить большой файл каждый x шаблоны без успеха, как я могу достигнуть этого?

Файловая структура:

> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS

> QWERT ASJDHASDJHASDHASDHASJDHAJDHJHAD

> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS

> QTRE AGAHDSJHDASJDHASJDHASJHDAJSDHJASHDJASHDJASHJDHASJDHASJDHAJSHDASJHDJASHDJASHDJASHDJASHDJASJDASHDSUHQYWGEYWGYWGQYWDWBCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS

> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTSASHDJASHDJASDHAJSDHAJDHQUHWUDHUHAWUHASUDHUASDHSUDHSU

Это имеет тысячи строк с различными длинами и несколько строк на">" заголовок. Я хочу разделить тот большой файл на меньшую фильтрацию каждых 100">" заголовки на файл, который возможно сделать?

Заранее спасибо!

2
задан 18 January 2016 в 19:29

2 ответа

Вот маленький сценарий жемчуга для Вас. Можно сохранить его как split_files.pl и выполненный это как perl split_files.pl input.txt. Вывод будет сохранен в названных файлах chunk_0, chunk_1 и т.д.

#!/usr/bin/perl                                                           
use strict;
use warnings;

my$infile=shift(@ARGV);

my$linecount=0;
my$filecount=0;
my$outfile="chunk_".$filecount;

open(IN,'<',$infile) or die $!;
open(OUT,'>',$outfile) or die $!;
$/="\n>";
while(<IN>)
{
    chomp;
    $_=~s/>//g;
    if($linecount==100)
    {
        $filecount++;
        $outfile="chunk_".$filecount;
        close OUT or die $!;
        open(OUT,'>',$outfile) or die $!;
        $linecount=0;
    }
    print OUT ">",$_,"\n";
    $linecount++;
}
close OUT or die $!;
close IN or die $!;

Объяснение:
Прием сценария является строкой $/="\n>";. Эта строка изменяет разрыв строки по умолчанию charachter (\n) к "новой строке +>" (\n>). В цикле с условием продолжения каждое начало блока">" используется сразу. Я использовал две переменные подсчета ($linecount и $filecount). Строки (или блоки в этом случае) считаются и когда это количество совершает нападки 100, новый файл используется для вывода.

1
ответ дан 2 December 2019 в 04:59

Подход Python

Сценарий ниже разделяет имя файла, данное на командной строке в файлы однажды определенное количество > символы были замечены в начале строки. Количество замеченных символов также указано на командной строке. Таким образом синтаксис следующие:

$ ./split_file.py input.txt 3

Источник сценария

#!/usr/bin/env python
import sys

def write_split_file(count,orig_name,lines):
    split_name = orig_name + '.split.' + str(count)
    with open(split_name,'w') as fd:
       fd.write("\n".join(lines))

def main():
    counter = 0
    limit = int(sys.argv[2])
    line_list = []
    with open(sys.argv[1]) as fd1:
        for line in fd1:
            line_list.append(line.strip())
            if line.startswith('>'):
               counter+=1
               if counter % limit == 0:
                  write_split_file(counter,sys.argv[1],line_list)
                  line_list = []

    if line_list:          
       write_split_file(counter,sys.argv[1],line_list)

if __name__ == '__main__': main()

Примечание: сценарий записан для Python 2, но совместим с Python 3. Может легко быть изменен для разделения на основе переменной стартовой строки.

0
ответ дан 2 December 2019 в 04:59

Другие вопросы по тегам:

Похожие вопросы: