perl 对文件去重处理
时间: 2024-12-23 10:19:49 浏览: 7
Perl语言提供了一些强大的内置函数和模块来处理文件去重。以下是几种常见的方法:
1. 使用`sort`和`uniq`命令结合:可以先读取文件内容到数组,对数组排序,然后通过`uniq`去除重复行。例如:
```perl
my @lines = <$file>;
@lines = sort { $a cmp $b } @lines;
open my $out, '>', 'unique_file.txt' or die "Cannot open file: $!";
print $out join '', grep { !$seen{$_}++ } @lines;
close $out;
```
这里假设`$file`是待处理的文件,`unique_file.txt`是去重后的结果。
2. 利用哈希表(Hash):遍历文件,每读一行就检查该行是否已存在于哈希表中。如果不存在,则添加到文件中,同时更新哈希表。
```perl
my %seen;
open my $in, '<', 'input_file.txt' or die "Cannot open file: $!";
open my $out, '>', 'output_file.txt' or die "Cannot open file: $!";
while (my $line = <$in>) {
if (!exists $seen{$line}) {
print $out $line;
$seen{$line} = 1;
}
}
close $in;
close $out;
```
3. `File::Slurp`模块:这是一个实用模块,简化了文件操作。它允许一次性加载整个文件到内存中,然后处理。
```perl
use File::Slurp;
my $content = read_file('input_file.txt');
my @unique_lines = unique(@$content);
write_file('output_file.txt', \@unique_lines);
sub unique {
return keys %seen ||= {};
$_ = shift while !seen{$_};
return @_;
}
```
以上都是简单的去重方法,实际应用中可能会考虑更复杂的逻辑,比如忽略大小写、处理二进制文件等。记得在结束时关闭打开的文件句柄。
阅读全文