Добрый день из Испании. Я изучаю AWK, и я знаю, как делать команды из терминала Linux с помощью труб, но я бы хотел писать сценарии AWK. Посмотрим, сможешь ли ты мне помочь.HowTo. Написание сценария awk
У меня есть следующий код:
awk '{if (NR!=1) {printf $0}}' sequence.fasta |
awk '{sub(/ATG/, "\n&")}{print}' |
awk 'NR == 2' | awk '{gsub(/.../, "& ")}1' |
awk '{for (i=1; i<=NF; i++) {printf $i" "; if ($i~/TAA/ || $i~/TAG/ || $i~/TGA/) {exit}}}' |
fold -w 60
из файла FASTA, этот сценарий показывает от стартового кодона (ATG) СТОП-кодона (ТАА, TAG или TGA). Файл FASTA имеет следующую структуру:
>sequence.fasta
GATCCAAAACACATTCTCCCTGGTAGCATGGACAAGCAACATTTTGGGAGAAATGGAGCAAAAAAACATA
AACTTCACAGTAACAAACATAAACACTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTC
TCTCTCTCCACACACACACACACTCGCACTCACAGCCTCACAACACAGGTATACATGTTTACTTAGGTCA
CTCAGAATTGTAAACTGTAAGTGTGCCTTGCAAAGAACCACTGCTCCTTACAGTGAGCAGTGCTTACCTG
GTGCTTACCTGAAGAAGATATAGCTCCTTAAAGAGTAAATGAATAAATACCTTAAGTAAGTTTGGGAAAC
Применив код я написал выше, я получаю следующий результат:
ATG GAC AAG CAA CAT TTT GGG AGA AAT GGA GCA AAA AAA CAT AAA
CTT CAC AGT AAC AAA CAT AAA CAC TCT CTC TCT CTC TCT CTC TCT
CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CCA CAC ACA CAC ACA
CTC GCA CTC ACA GCC TCA CAA CAC AGG TAT ACA TGT TTA CTT AGG
TCA CTC AGA ATT GTA AAC TGT AAG TGT GCC TTG CAA AGA ACC ACT
GCT CCT TAC AGT GAG CAG TGC TTA CCT GGT GCT TAC CTG AAG AAG
ATA TAG
Итак, мой код сделать это:
Он печатает все последовательности вместе за исключением заголовка. Printf печатает без \ n.
awk '{if (NR!=1) {printf $0}}' sequence.fasta
Он ищет первый ATG и представляет новую линию.
awk '{sub(/ATG/, "\n&")}{print}'
Как мы только вводит новую строку при запуске ATG, се выберите линию 2, игнорируя линии 1 (5'-UTR).
awk 'NR == 2'
Теперь мы создаем кодоны, разделенные пробелом.
awk '{gsub(/.../, "& ")}1'
Теперь, с петлей, мы ищем кодон STOP. Когда он находит это, цикл останавливается.
awk '{for (i=1; i<=NF; i++) {printf $i" "; if ($i~/TAA/ || $i~/TAG/ || $i~/TGA/) {exit}}}'
Для лучшего обзора мы исправим ширину 60 символов.
fold -w 60
Итак, я попытался поставить все вместе в script.awk
, но он не работает. Я знаю, что с awk это не так просто, как писать все вместе. Так, пожалуйста, помогите мне с этим, пожалуйста?
Это абсолютно «так же просто, как писать все вместе», но вам нужно знать, что «все это» должно делать. Почему ваш ожидаемый результат начинается с 'ATG GAC', когда первое появление« ATG »на вашем входе сопровождается« AAG », насколько я могу видеть. И не начинайте говорить о fastas и кодонах, или что-то такое, что означает ваш домен - просто расскажите о шаблонах/комбинациях букв/строк в тексте ввода. –
Это был просто пример. Мой выход идет от первого появления ATG до первой остановки кодонов. – user2886545
Когда вы отправляете пример, это помогает нам помочь вам, если мы можем сопоставить ввод с выходом, поэтому, пожалуйста, отредактируйте свой вопрос для ввода сообщения и соответствующего вывода, а не из двух разрозненных наборов. И вы не должны ожидать, что кто-либо из awk-экспертов, читающих это, знает или заботится о том, что такое «кодонов» - просто скажите «Я хочу найти первое вхождение« FOOBAR »' или любую строку или строки, которые вы ищете. –