Я попытался найти хороший способ выполнить это, но, к сожалению, я его не нашел.Удалить повторяющиеся строки в файле по шаблону
Я работаю с файлами с этим форматом:
= Кластер =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22491.xml; спектр = 1074 истинный
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 2950 истинный= Кластерный =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 1876 истинная
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 3479 истинная SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 3785 истинная= Кластерный =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22493.xml; спектр = 473 верно
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22493.xml; спектр = 473 верно
Как вы можете видеть, каждая линия SPEC отличается, за исключением последней, где число строк спектра повторяется. Что бы я хотел сделать, это взять каждый фрагмент информации между рисунком =Cluster=
и проверить, повторяются ли линии со значением спектра. В случае повторения нескольких строк удаляются все, кроме одного.
Выходной файл должен выглядеть так:
= Кластер =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22491.xml; спектр = 1074 истинный
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 2950 истинный= Кластерный =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 1876 истинная
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 3479 истинная
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; спектр = 3785 истинный= Кластер =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22493.xml; спектр = 473 верно
Я использую это, чтобы разбить файл, используя но я не знаю, как проверить, если спектр повторяется.
#!/usr/bin/perl
undef $/;
$_ = <>;
$n = 0;
for $match (split(/(?==Cluster=)/)) {
open(O, '>temp' . ++$n);
print O $match;
close(O);
}
PD: Я использовал Perl, потому что для меня это легче, но я понимаю и питон.
повторяющиеся строки подряд? – Toto