Регулярное выражение для соответствия «строка длиной меньше X находится между двумя»> «символы»

1

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

& GT; xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

& GT; XXXXXXXXXXXXXX

XXXXXXXXXXX

& GT;

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

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

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

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

moomox
источник

Ответы:

1

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

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

объяснение:

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

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

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