<p>类似这样的操作将删除重复的行(整个文件)。你知道吗</p>
<pre><code>#!/usr/bin/perl
use warnings;
use strict;
my %seen;
while ( <> ) {
next if ( m/SPEC/ and $seen{$_}++ );
print;
}
</code></pre>
<p>如果您想更具体地了解光谱值,例如:</p>
<pre><code>next if ( m/spectrum=(\d+)/ and $seen{$1}++ );
</code></pre>
<p>在划分集群时,您可以做一些非常类似的事情,但只需:</p>
<pre><code> if ( $line =~ m/==Cluster==/ ) {
open ( $output, ">", "temp".$count++ );
select $output;
}
</code></pre>
<p>这会将默认的“print”位置设置为<code>$output</code>(您也需要在循环外声明它)。你知道吗</p>
<p>您还应该:</p>
<ul>
<li><code>use strict;</code><code>use warnings;</code></li>
<li>避免将<code><></code>读入<code>$_</code>,这是不必要的。但是如果你不得不这样做的话,最好是<code>$block = do { local $/; <> };</code>。然后<code>$block =~ m/regex/</code></li>
<li>使用词汇文件句柄:<code>open ( my $output, '>', 'filename' ) or die $!;</code></li>
<li>打开时检查返回代码(<code>or die $!</code>通常就足够了)。你知道吗</li>
</ul>
<p>所以这就像:</p>
<pre><code>#!/usr/bin/perl
use warnings;
use strict;
my %seen;
my $count = 0;
my $output;
while ( <> ) {
next if ( m/spectrum=(\d+)/ and $seen{$1}++ );
if ( m/==Cluster==/ ) {
open ( $output, ">", "temp".$count++ ) or die $!;
select $output;
}
print;
}
</code></pre>