awk манипулирование файлом fasta

Я полагаю, что необходимо абстрагировать еще 1 слой, так, чтобы Вы закончили с этим видом шаблона.

GenericName 
    calls -> Architecture_or_Server_or_Domain_or_User_specific
                calls -> AllArchServer Script

Пример с помощью резервного копирования

do_machine_backup одно имя людей для использования (выполненный, добавьте к заданиям крона и т.д.),

Это - задача, к тренировке, в/на / какой среде/сервере (возможно, пользователь) это выполняется. Скажите, что у Вас есть 3 среды dev/test/prod, это могло разработать это и затем назвать сценарий Environment_Specific.

do_dev_machine_backup -type user | db | web
do_test_machine_backup ...
do_prod_machine_backup ...
or
do_centos_machine_backup -env dev|test|prod ...
...

Это разрабатывает знание домена/среды, который является backup_host, что, чтобы быть поддержанным, который ключи использовать, куда файлы журнала должны пойти и т.д.

do_gen_machine_backup <src dir> <dst host> dst dir> <host_key> ... many args

Я сделал бы эти сценарии (не псевдонимы или функции), перепутывание его (имеющий обоих) будет только служить для создания его более сложным для отлаживания/разрабатывания/поддержания, как это разрабатывает. Вы только сохраняете миллисекунды, сравнивают это с частотой, Вы используете их и продолжительность времени выполнения сценариев, она, вероятно, сделает это незначительным, что это функции/псевдонимы и не сценарии.

Я положил бы все на одно место, где когда-либо Вы хотите, но один верхний уровень, это делает установку нового сервера легкой, установите один каталог и дополнительно, добавьте один каталог к пути. например, /usr/local/CompanyShortName и отсюда, можно расшириться в зависимости от требований теперь и будущего ./bin ./sbin/ ./config ./keys ...

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

2
17.06.2015, 01:34
3 ответа
awk 'BEGIN{ RS=">[^\n]+\n"; } 
     NR>1{ printf( "%s", rt gensub("\n","","g") "\n" ); }
     { rt=RT; }' myfile

Вывод:

>chr1
ACGTGGCTGCCGTTATCCTTG
>chr2
ACTTTTACTCATAA

Для общей справки: Используя входные данные из примера формата FASTA и повторив их для создания тестового файла 81,1 МБ , я получил следующее time результаты:

Peter.O      real  0m1.653s   user  0m1.396s   sys  0m0.256s
user2196728  real  0m6.587s   user  0m5.972s   sys  0m0.252s
kos          real  0m12.866s  user  0m12.589s  sys  0m0.268s

md5sum всех протестированных методов были одинаковыми.
user2196728 версия должна была изменить > chr только на > для более общей работы.

1
27.01.2020, 22:05

Это должно работать должным образом:

awk '/>chr/{if (x)print x;print;x="";next}{x=(!x)?$0:x$0;}END{print x;}' file

>chr1
ACGTGGCTGCCGTTATCCTTG
>chr2
ACTTTTACTCATAA
1
27.01.2020, 22:05

Поскольку вы используете очень специфический формат файла, я предположил, что первая запись всегда в виде ><строка>:

< inputfile awk 'NR==1 {print;next} !/>/ {x=x$0;next} />/ {print x"\n"$0;x="";next} END {print x}' > outputfile

Расширен:

NR==1 {
    print;
    next
}
!/>/ {
    x=x$0;
    next
}
/>/ {
    print x"\n"$0;
    x="";
    next
}
END {
    print x
}
  • Первый блок выполняется только в том случае, если номер текущей обрабатываемой записи равен 1: печатает текущую обработанную запись и переходит к следующей записи;
  • Второй блок выполняется только в том случае, если регулярное выражение > не совпадает с текущей обработанной записью: оно соединяет содержимое текущей обработанной записи с переменной x и переходит к следующей записи;
  • Третий блок выполняется только в том случае, если регулярное выражение > совпадает с текущей обработанной записью: оно печатает содержимое переменной x, за которым сразу следует символ новой строки, а затем содержимое текущей обработанной записи, и переходит к следующей записи;
  • Четвертый блок выполняется только в том случае, если больше нет обрабатываемых записей: он печатает содержимое переменной x;

Я проверил все ответы на этот вопрос, проверив md5sum выходных файлов на SSD сразу после запуска системы и сразу после выдачи команды sudo fstrim -v /, используя следующий скрипт bash, где output file - это файл ~226MB, созданный путем повторения файла по этой ссылке 100000 раз:

#!/bin/bash

for ((i=0; i<3; i++)); do /usr/bin/time -f "kos\t\treal %e" awk 'NR==1 {print;next} !/>/ {x=x$0;next} />/ {print x"\n"$0;x="";next} END{print x}' outputfile > outputfile1; done
for ((i=0; i<3; i++)); do /usr/bin/time -f "Peter.O\t\treal %e" awk 'BEGIN{ RS=">[^\n]+\n"; }NR>1{ printf( "%s", rt gensub("\n","","g") "\n" ); }{ rt=RT; }' outputfile > outputfile2; done
for ((i=0; i<3; i++)); do /usr/bin/time -f "user2196728\treal %e" awk '/>/{if (x)print x;print;x="";next}{x=(!x)?$0:x$0;}END{print x;}' outputfile > outputfile3; done
md5sum outputfile1 outputfile2 outputfile3

Это результаты:

~$ sudo fstrim -v /
[sudo] password for user: 
/: 68,8 GiB (73839202304 bytes) trimmed
~$ cd tmp
~/tmp$ bash exe
kos         real 2.55
kos         real 2.57
kos         real 2.55
Peter.O     real 2.93
Peter.O     real 2.92
Peter.O     real 2.92
user2196728 real 2.51
user2196728 real 2.51
user2196728 real 2.68
0618a8077b43eb44eb263d7d6f84777f  outputfile1
0618a8077b43eb44eb263d7d6f84777f  outputfile2
0618a8077b43eb44eb263d7d6f84777f  outputfile3
1
27.01.2020, 22:05

Теги

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