我試圖找到一個很好的方式來執行此操作,但不幸的是我沒有找到一個。根據模式刪除文件中的重複行
我用這個格式文件的工作:
=集羣=
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真= Cluster =
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; spectrum = 1876 true
SPEC PRD000681; PRIDE_Exp_Complete_Ac_22498.xml; spectrum = 3479 true
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