Извлечь разделы файла в отдельные файлы

У меня есть файл вида —

> SDF123.1 бла-бла

ATCTCTGGAAACTCGGTGAAAGAGAGTAT

AGTGATGAGGATGAGTGAG …

> SBF123.1 бла-бла

ATCTCTGGAAACTCGGTGAAAGAGAGTAT

AGTGATGAGGATGAGTGAG ….

И я хочу извлечь различные разделы этого файла в отдельные файлы (например, здесь

Я написал следующий код, но он работает слишком медленно по сравнению с тем, когда у меня не было close команда в нем. Мне пришлось включить close команда, так как без нее я получал ошибку awk — too many open files.

Вот код —

cat C1_animal.fasta | awk -F ' ' '{
        if (substr($0, 1, 1)==">") {filename=(substr($1,2) ".fa")}
        print $0 >> filename; close (filename)
}'

Как я могу сделать этот код более эффективным по времени? Я новичок в awk.

1 ответ
1

Попробуй закрыть свой filename только когда это необходимо:

Файл actg.awk

BEGIN {
    FS=" "
}
/^>/ {
    if (filename != "") {
        close(filename)
    }
    filename = substr($1,2) ".fa"
    next
}
filename != "" {
    print $0 > filename
}
END {
    close (filename)
}

С помощью команды оболочки:

awk -f actg.awk C1_animal.fasta

Примечание: если вы уверены, что перед первым «> ...«вы можете пропустить filename != " " тестовое задание

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *