#sed #bioinformatics #fasta
#sed #биоинформатика #fasta
Вопрос:
У меня есть несколько наборов данных в формате txt, которые имеют предсказуемое содержимое. Я пытаюсь удалить первый набор строк. Первая строка начинается с >*chromosome
, и я хочу удалить все до >*plasmid
. Я могу либо сказать ему, чтобы он удалял все, >
пока он не встретит его снова, либо удалял все между первым >
и вторым >
. Я пытался сделать что-то вроде этого:
sed -i.bak '/>/,/^>*$/{d}' file.txt
Это не сработало исходный код, который я нашел, был:
sed -i.bak '/>/,/^s*$/{d}' file.txt
Комментарии:
1. Добро пожаловать в SO, спасибо, что проявили свои усилия, не могли бы вы опубликовать образцы ввода и ожидаемого результата в своем вопросе для лучшего понимания вопроса, спасибо.
2. Вы знаете первую строку, поэтому используете ее адрес, а не регулярное выражение, т.е. 1. Вы знаете, как удалить до регулярного выражения, т. е.
address,/regexp/d
Теперь вы хотите сохранить строку, которая идентифицируется регулярным выражением. т.е./regexp/p
. Соедините все это (в правильном порядке)!
Ответ №1:
Используйте этот однострочник Perl:
perl -0777 -pe 's{^>chromosome.*(?=^>plasmid)}{}sm' in.fasta
ПРИМЕР:
# Create example input file:
cat > in.fasta <<EOF
>foo
TCGA
>chromosome
ACGT
>plasmid
CGTA
EOF
perl -0777 -pe 's{^>chromosome.*(?=^>plasmid)}{}sm' in.fasta > out.fasta
Вывод в out.fasta
:
>foo
TCGA
>plasmid
CGTA
Однострочник Perl использует эти флаги командной строки:
-e
: Указывает Perl искать код в строке, а не в файле.
-p
: Перебирайте входные данные по одной строке за раз, присваивая им значение $_
по умолчанию. Добавляйте print $_
после каждой итерации цикла.
-0777
: Глотайте файлы целиком.
Регулярное выражение использует эти модификаторы:
/m
: Разрешить многострочные совпадения.
/s
: Разрешить .
сопоставление новой строки.
^>chromosome.*(?=^>plasmid)
: Регулярное выражение, которое соответствует >chromosome
starts, начинается с начала строки, за которым следует 0 или более символов и заканчивается прямо на (но не включая) совпадение с >plasmid
в начале строки. Выражение (?=PATTERN)
является положительным прогнозом нулевой длины.
СМОТРИТЕ ТАКЖЕ:
perldoc perlrun
: как запустить интерпретатор Perl: переключатели командной строки
perldoc perlre
: Регулярные выражения Perl (регулярные выражения)
perldoc perlre
: Регулярные выражения (регулярные выражения) Perl: кванторы; Классы символов и другие специальные экранирования; Утверждения; Группы захвата
perldoc perlrequick
: Быстрый запуск регулярных выражений Perl