如何删除重复行?
当前代码:
use strict;
use warnings;
my $input = input.txt;
my $output = output.txt;
my %seen;
open("OP",">$output") or die;
open("IP","<$input") or die;
while(my $string = <IP>) {
my @arr1 = join("",$string);
my @arr2 = grep { !$seen{$_}++ } @arr1;
print "@arr2\n";
print OP "@arr2\n";
}
close("IP");
close("OP");
字符串
输入:
india
australia
america
singapore
india
america
型
预期输出:
india
australia
america
singapore
型
4条答案
按热度按时间h7appiyu1#
使用这个Perl一行程序删除所有重复项,无论是否相邻:
字符串
仅删除相邻重复项(如UNIX
uniq
命令):型
Perl一行程序使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中查找。-n
:一次循环一行输入,默认情况下将其分配给$_
。当第一次看到该行时,
$seen{$_}
首先被求值,结果为假,因此该行被打印。然后,$seen{$_}
递增1,这使得每次再次看到该行时它都为真(因此不再打印同一行)。第一个一行程序避免了一次将整个文件阅读到内存中,这对于有很多长的重复行的输入是很重要的。只有每一行的第一次出现以及它的出现次数存储在内存中。
另见:
perldoc perlrun
:如何执行Perl解释器:命令行开关pbgvytdp2#
请研究以下代码片段,您非常接近使用
%seen
哈希。字符串
输出
型
jdzmm42g3#
从脚本中删除不需要的代码行。
以下是更新后的脚本:
字符串
测试结果:
型
j2qf4p5b4#
你把这一切都弄得太复杂了。代码的主要部分可以简化为:
字符串
或者甚至:
型