Третьим решением будет использование прокси-серверов 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
Вы можете легко сделать это в 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
Как правило, не используйте циклы оболочки для обработки текста . Они медленные, громоздкие и подвержены ошибкам.
Хотя (как вам сообщили в комментариях ), вероятно, есть инструменты биоинформатики, которые могут быть более подходящими для вашего приложения, это можно сделать с помощью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
)