рис. (1 ):рисунок обрезан по правому краю

Вы можете легко сделать это в awk:

awk '{ if(/^>/){name=$0; sub(/^>/,"", name);}{print >> name".fa"}}' file.fa 

Это будет перебирать всю строку входного файла, и, если первый символ будет >, он сохранит эту строку как name. Затем он удалит >из содержимого name, так как вы не хотите, чтобы это было в имени файла. Наконец, каждая строка добавляется в файл с именем name.fa, где name— это имя текущей последовательности.

Если вы хотите распечатать только те последовательности, в которых больше N строк, вы можете использовать:

awk -v min=4 '{ 
               if(/^>/){ 
                    if(num >= min){
                        print seq >> name".fa"
                    } 
                    name=$0; 
                    sub(/^>/,"", name); 
                    seq=$0; 
                    num=0
                }
                else{
                    seq = seq"\n"$0; 
                    num++
                }
               }
               END{
                 if(num >= min){
                    print seq >> name".fa"
                 }
               }' file.fa 

Как правило, не используйте циклы оболочки для обработки текста . Они медленные, громоздкие и подвержены ошибкам.

3
21.08.2021, 19:54
0 ответов

Теги

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