taskset -c 1-3./a.out arg1 arg2
запускает процесс
a.out
с заданными аргументами и привязкой к процессорам 1, 2 или 3 (на основе нуля ).Вот минимальная тестовая программа на C, которую можно использовать, чтобы увидеть ее в действии:https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787
Вы можете попробовать:
awk '!/^>/ { gsub(/\./, "X") }1' Sfr.pep > Sfr2.pep
Выход:
>sequence.1
GTCAGTCAGTCAXGTCAGTCA
Кажется более естественным сделать это с помощьюsed
:
sed '/^>/!y/./X/' Sfr.pep >Sfr2.pep
Это будет соответствовать ^>
текущей строке ("эта строка начинается с символа >
?" ). Если это выражение не совпадает с и , команда y
используется для замены каждой точки в этой строке на X
.
Тестирование:
$ cat Sfr.pep
>sequence.1
GTCAGTCAGTCA.GTCAGTCA
$ sed '/^>/!y/./X/' Sfr.pep >Sfr2.pep
$ cat Sfr2.pep
>sequence.1
GTCAGTCAGTCAXGTCAGTCA
Основная проблема с вашим кодом awk
заключается в том, что next
выполняется всякий раз, когда вы встречаете строку заголовка fasta. Это означает, что ваш код создает только данные последовательности без заголовков. Эти данные последовательности должны выглядеть нормально, но это не сильно поможет.
Простое отрицание теста и удаление блока next
(или предшествующий next
блокprint
)решит проблему в awk
для вас, но, и это мое личное мнение, использование y
в sed
более элегантна, чем использованиеgsub()
(или s///g
вsed
)для транслитерации отдельных символов.
Вы не печатаете строки, начинающиеся с >
, вы печатаете только строки, в которых вы выполняете замену. Используйте команду print
для печати перед переходом к следующей строке.
awk '/^>/ {print;next} {gsub(/\./,"X")}1' Sfr.pep > Sfr2.pep
Использование Raku (урожденного Perl _6 )и/или Perl:
raku -pe 's:g/^^ <-[>]> <-[.]>*? <(\.)> /X/;'
ИЛИ (может быть более читаемым):
raku -pe 's:g{ ^^ <-[>]> <-[.]>*? <(\.)> } = Q{X};'
Raku вызывается из командной строки оболочки с флагами автопечати -pe
. Оператор подстановки места s///
в -используется здесь в двух видах. Первый — классический, а второй — обновленная Raku идиома Perl (5 )s{...}{...};
.
Вкратце, читая атомы слева от -до -справа, "поиск, начиная с ^^
начала -строки -и где <-[>]>
нет отдельного символа ">" найдено, то там, где <-[.]>*?
не -жадно не найден литерал нуля -или -больше ".", если затем найден <(\.)>
литерал ".", отбросить все совпадения до/после и заменить эти «.» с «X»; сделайте это глобально, построчно, автоматически печатая все строки с заменой (s ), как описано.
Говоря о родословной Perl5, вот как вы могли бы сделать P5
родственным второму примеру Raku выше (, но флаг командной строки -pE
может быть лучше в более старых установках):
perl -pe 's{^ [^>] [^.]*? \K\. }{X}gx;'
(Особая благодарность @Sinan Ünür за руководство P5, ссылка ниже ).
https://stackoverflow.com/a/15578028/7270649
https://stackoverflow.com/a/24542792/7270649
https://docs.raku.org/language/operators#s///_in-place_substitution
https://raku.org/
#!/usr/bin/python
import re
g=re.compile(r'^>')
rep=re.compile(r'\.')
k=open('file','r')
for b in k:
if not re.search(g,b):
er=re.sub(rep,"X",b)
print er.strip()
else:
print b.strip()
выход
>sequence.1
GTCAGTCAGTCAXGTCAGTCA