加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl – 在文件或数组中查找重复的行

发布时间:2020-12-15 21:58:27 所属栏目:大数据 来源:网络整理
导读:我正在尝试从文件句柄中打印重复的行,而不是删除它们或我在其他问题上看到的任何其他内容.我没有足够的perl经验能够快速做到这一点,所以我在这里问.这样做的方法是什么? 解决方法 使用标准Perl shorthands: my %seen;while ( ) { print if $seen{$_}++;}
我正在尝试从文件句柄中打印重复的行,而不是删除它们或我在其他问题上看到的任何其他内容.我没有足够的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 {$_}将在该行的文本命名的散列中有一个标量槽(这是$_正在使用{}大括号).
>使用后缀增量运算符(x),我们取表达式的值,记住在表达式之后递增它.所以,如果我们没有“看到”$${_ _}未定义的行 – 但是当被强制进入这样的数字“上下文”时,它被视为0 – 而且为false.
>然后它增加到1.

因此,当while开始运行时,所有行都为“零”(如果它可以帮助您将这些行视为“未看到”),那么,当我们第一次看到一行时,perl会获取未定义的值 – 这会失败if – 并将标量槽处的计数增加到1.因此,对于将来通过if条件并将其打印的任何未来事件,它为1.

现在正如我上面所说,%see声明了一个哈希,但是在严格关闭的情况下,可以在现场创建任何变量表达式.所以perl第一次看到$see {$_}它知道我正在寻找%看到它,它没有它,所以它创造了它.

关于这一点的一个额外的好处是,最后,如果你想使用它,你有一个重复每一行的次数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读