Я полагаю, что необходимо абстрагировать еще 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
...
Трудно быть конкретным, таким образом, мои предложения были небольшим дженериком, надо надеяться, некоторые принципы установки среды прибывают через и могут быть фруктами для дальнейших комментариев.
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
только на >
для более общей работы.
Это должно работать должным образом:
awk '/>chr/{if (x)print x;print;x="";next}{x=(!x)?$0:x$0;}END{print x;}' file
>chr1
ACGTGGCTGCCGTTATCCTTG
>chr2
ACTTTTACTCATAA
Поскольку вы используете очень специфический формат файла, я предположил, что первая запись всегда в виде ><строка>
:
< 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
}
>
не совпадает с текущей обработанной записью: оно соединяет содержимое текущей обработанной записи с переменной 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