Perl – 在文件或数组中查找重复的行
我正在尝试从文件句柄中打印重复的行,而不是删除它们或我在其他问题上看到的任何其他内容.我没有足够的perl经验能够快速做到这一点,所以我在这里问.这样做的方法是什么?
解决方法
使用标准Perl shorthands:
my %seen; while ( <> ) { print if $seen{$_}++; } 作为“一线”: perl -ne 'print if $seen{$_}++' 更多数据?这打印<文件名>:<行号>:< line>: perl -ne 'print ( $ARGV eq "-" ? "" : "$ARGV:" ),"$.:$_" if $seen{$_}++' 看到%的解释: >%see声明了一个哈希.对于输入中的每个唯一行(在这种情况下来自while(<>)),$see {$_}将在该行的文本命名的散列中有一个标量槽(这是$_正在使用{}大括号). 因此,当while开始运行时,所有行都为“零”(如果它可以帮助您将这些行视为“未看到”),那么,当我们第一次看到一行时,perl会获取未定义的值 – 这会失败if – 并将标量槽处的计数增加到1.因此,对于将来通过if条件并将其打印的任何未来事件,它为1. 现在正如我上面所说,%see声明了一个哈希,但是在严格关闭的情况下,可以在现场创建任何变量表达式.所以perl第一次看到$see {$_}它知道我正在寻找%看到它,它没有它,所以它创造了它. 关于这一点的一个额外的好处是,最后,如果你想使用它,你有一个重复每一行的次数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |