извлекать каждый файл последовательности в виде отдельного файла

Существует файл ecoli.ffn с строками, указывающими имя генов секвенирования:

 $head ecoli.ffn >ecoli16:g027092:GCF_000460315:gi|545267691|ref|NZ_KE701669.1|:551259-572036 ATGAGCCTGATTATTGATGTTATTTCGCGT AAAACATCCGTCAAACAAACGCTGATTAAT >ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 GTGTACGCTATGGCGGGTAATTTTGCCGAT >ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 GTGTACGCTATGGCGGGTAATTTTGCCGAT CTGACAGCTGTTCTTACACTGGATTCAACC CTGACAGCTGTTCTTACACTGGATTCAACC 

Как показано выше, имя гена находится между 1-й и 2-й двоеточиями:

 g027092 g000011 g000012 

Я хотел бы использовать ecoli.ffn для генерации трех файлов: g027092.txt , g000011.txt , g000012.txt , содержащих все данные последовательности.

Например, g027092.txt будет содержать необработанные данные, но без заголовка :

 $cat g027092.txt ATGAGCCTGATTATTGATGTTATTTCGCGT AAAACATCCGTCAAACAAACGCTGATTAAT 

Как это сделать?

One Solution collect form web for “извлекать каждый файл последовательности в виде отдельного файла”

awk на помощь!

 $ awk -F: -v RS=">" 'NR==FNR{n=split($0,t,"\n"); for(i=1;i<n;i++) a[t[i]]; next} $2 in a{file=$2".txt"; sub(/[^\n]+\n/,""); print > file}' index file $ head g*.txt ==> g000011.txt <== GTGTACGCTATGGCGGGTAATTTTGCCGAT ==> g000012.txt <== GTGTACGCTATGGCGGGTAATTTTGCCGAT CTGACAGCTGTTCTTACACTGGATTCAACC CTGACAGCTGTTCTTACACTGGATTCAACC ==> g027092.txt <== ATGAGCCTGATTATTGATGTTATTTCGCGT AAAACATCCGTCAAACAAACGCTGATTAAT к $ awk -F: -v RS=">" 'NR==FNR{n=split($0,t,"\n"); for(i=1;i<n;i++) a[t[i]]; next} $2 in a{file=$2".txt"; sub(/[^\n]+\n/,""); print > file}' index file $ head g*.txt ==> g000011.txt <== GTGTACGCTATGGCGGGTAATTTTGCCGAT ==> g000012.txt <== GTGTACGCTATGGCGGGTAATTTTGCCGAT CTGACAGCTGTTCTTACACTGGATTCAACC CTGACAGCTGTTCTTACACTGGATTCAACC ==> g027092.txt <== ATGAGCCTGATTATTGATGTTATTTCGCGT AAAACATCCGTCAAACAAACGCTGATTAAT 

объяснение

NR==FNR{n=sp... block анализирует первый файл и создает таблицу поиска

$2 in a{file=$2".txt"; если текущая запись находится в таблице поиска, задайте имя файла, используя расширение key и txt

sub(/[^\n]+\n/,"") удалить строку заголовка

print > file и распечатать указанное имя файла.

  • Каковы различия между Perl, Python, AWK и sed?
  • Сравните 2 файла и удалите любые строки в файле2, когда они соответствуют значениям, найденным в файле1
  • Рекурсивно перемещать каталог и заменять вызовы функций
  • Как получить плоский XML, чтобы внешние объекты были объединены на верхний уровень
  • Sed скрипт для редактирования файла csv или Python
  • Как случайным образом удалить несколько строк из большого файла?
  • Команда sed запускается с использованием os.system () или subprocess.call () оставляет файл csv без разделителя
  • Правильный способ избежать вызова подпроцесса в python
  • Python - лучший язык программирования в мире.