Я не знаю bioawk
, но я предполагаю, что оно идентично awk с некоторыми начальными разборками и константными определениями.
Я бы поступил следующим образом. Предполагая, что вы хотите найти строки, содержащие более 4-х кратную букву C
и длину более 300, вы можете сделать:
bioawk -c fastx '
(length($seq) > 300) && (gsub("C","C",$seq)>4) {
print ">"$name; print $seq
}' 72hDOWN-fasta.fasta
но это предполагает, что seq
- это полная последовательность символов.
Идея заключается в следующем. Команда gsub
выполняет подстановки в строках и возвращает общее количество подстановок. Следовательно, если мы заменим все символы «C» на «C», мы фактически не изменим строку, а получим общее количество «C» в строке.
Из стандарта POSIX IEEE Std 1003.1-2017 :
gsub(ere, repl[, in])
: ведет себя как sub
(см. Ниже), за исключением того, что он должен заменить все вхождения регулярного выражения (например,
служебная глобальная замена ed
) в $0
или в аргументе in,
когда указано.
sub(ere, repl[, in ])
: подставить строку repl
вместо первого экземпляра расширенного регулярного выражения ere
в строку in
и возвращает количество замен . An (&
) в строке repl
должна быть заменена строка из in
это соответствует ERE. предшествует
должно быть истолковано как буквальное
символ. Появление двух последовательных
символы должны интерпретироваться как один
буквальный символ. Любое другое вхождение
(например, перед любым другим символом)
трактоваться как буквальный символ. Обратите внимание, что если repl
строковый литерал (лексический токен STRING; см. грамматика ),
обработка символа происходит после любого лексического
обработка, включая любую лексическую последовательность -escape
обработка. Если указано in
и оно не является lvalue (см.
Выражения в awk ), поведение не определено. Если in
опущено, awk
должен использовать текущую запись ($0
) на своем месте.
Примечание: BioAwk основан на awk * Брайана Кернигана , который задокументирован в "Язык программирования AWK",
Аль Ахо, Брайан Керниган и Питер Вайнбергер
(Addison-Wesley, 1988, ISBN 0-201-07981-X)
. Я не уверен, что эта версия совместима с POSIX .