У меня есть файл вида —
> 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 ответ
Попробуй закрыть свой 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 != " "
тестовое задание