Хотя все вышеперечисленные методы работают, они ограничены тем, что ввод всегда должен выглядеть одинаково. Т.е. имя последовательности в вашем файле fasta должно иметь форму:
>NAME;size=value;
Несколько решений могут обрабатывать немного более расширенные имена последовательностей, но ни одно из них не обрабатывает случай, когда дела идут немного более обобщенно, т.е.
>NAME;label1=value1;label2=value2;STRING;label3=value3;
Последовательность печати, где метка xxx
соответствует значению vvv
:
awk '/>{f = /;xxx=vvv;/}f' file.fasta
Последовательность печати, где метка xxx
имеет числовое значение p
больше q
:
awk -v label="xxx" -v limit=q \
'BEGIN{ere=";" label "="}
/>/{ f=0; match($0,ere);value=0+substr($0,RSTART+length(ere)); f=(value>limit)}
f' <file>
В приведенном выше ere
- это регулярное выражение, которое мы пытаемся сопоставить. Мы используем его, чтобы найти расположение значения, прикрепленного к метке xxx
. Эта подстрока будет иметь нечисловые символы после своего значения, но, добавив к ней 0, она преобразуется в число, теряя все нечисловые значения (т.е. 3;label4=value4;
преобразуется в 3
). Мы проверяем, превышает ли это значение наш лимит, и печатаем последовательность на основе этого результата.