1

Текст в этой форме:

> xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

> XXXXXXXXXXXXXX

XXXXXXXXXXX

>

Мне нужно регулярное выражение, чтобы соответствовать всем >xxx... если есть меньше, скажем, 100, количество x между > символами. Как я могу это сделать?

Фактическая проблема: «smallt.c: 334 ОШИБКА: последовательность слишком короткая, чтобы ее можно было хэшировать» при попытке индексировать файл fasta со ссылочными последовательностями нескольких вирусов. Это работало раньше, когда в файле присутствовали только более длинные последовательности.

Я не нашел решения для самой маленькой ошибки (и даже если бы я хотел, я бы предпочел запустить его сначала с настройками по умолчанию), поэтому

Мне нужно удалить все более короткие последовательности ссылок из файла ссылок.

1 ответ1

1

вы можете использовать grep чтобы получить только те части файла, в которых между > находится более 100 символов, и записать результаты в новый файл (который затем должен работать с fasta):

grep -Pzo '>[^>]{100,}' fasta.txt > fasta_wo_short_genes.txt

объяснение:

  • -P указывает grep принимать регулярные выражения перлы (по какой-то причине я не мог заставить его работать с обычными регулярными выражениями grep)
  • z говорит grep, что нужно увидеть весь файл как одну большую строку
  • o говорит grep выводить только совпадающие части (в противном случае из-за флага z он всегда будет выводить весь файл, если найдет какое-либо совпадение)

регулярное выражение:

  • > персонаж, разделяющий генные последовательности вашего вируса
  • [^>] соответствует любому символу, кроме >
  • {100,} соответствует 100 или более повторениям предыдущего выражения (в этом случае [^>])

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .