Извлечь совпадение и все до следующего совпадения, сделать это для каждого совпадения

Третьим решением будет использование прокси-серверов NDP -.

ip neigh add proxy fd00 ::1 :1001 dev eth0 ip neigh добавить прокси fd00 ::1 :1002 dev eth0...

Я успешно использую его на своем DSL-соединении -дома, чтобы избежать DHCPv6 -PD.

подробнее здесь (Немецкий )http://www.thomas--schaefer.de/openvpn-fuer-altlasten.html

0
26.07.2019, 23:33
2 ответа

Вы можете легко сделать это в 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 

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

2
28.01.2020, 02:18

Хотя (как вам сообщили в комментариях ), вероятно, есть инструменты биоинформатики, которые могут быть более подходящими для вашего приложения, это можно сделать с помощьюcsplit:

csplit -sz file '/^>/' '{*}'

дает

$ head xx*
==> xx00 <==
>Number_one
[some thousands lines]

==> xx01 <==
>Number_two
[some other thousands lines, less than the latter]

==> xx02 <==
>Number_three
[Some other hundreds lines]

Опции, касающиеся нумерации и формата имен выходных файлов, см. на странице руководства (man csplit)

.
2
28.01.2020, 02:18

Теги

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