首页 > 解决方案 > 如何使用 perl 脚本从文件中删除选定的重复行

问题描述

假设我的文件 a.txt 包含以下内容。

aa
aa
bb
cc
dd
ee
ff
ee
gg

我想要以下输出 -

aa
aa
bb
cc
dd
ee
ff
gg

请注意,我只想删除特定的重复行:ee. 在我尝试过的一个班轮之后,我怎么能做到这一点。

perl -ne 'print unless $a{$_}++' a.txt

但它正在删除所有重复的行。

标签: regexfileperlfile-handling

解决方案


要删除仅特定(“目标”)行的重复项,请添加该条件

perl -lne'$tgt = "ee"; print unless $h{$_}++ and $_ eq $tgt' file

如果可能有多个这样的目标,则检查当前行是否与其中任何一个匹配。一个很好的工具any来自List::Util

perl -MList::Util=any -lne'
    $line=$_; 
    @tgt = qw(ee aa); 
    print unless $h{$line}++ and any { $_ eq $line} @tgt
' file

目标可以作为参数从命令行读取,如果不将它们硬编码有好处的话。

注意:在旧版本any中是在List::MoreUtils中,而不是在List::Util.


推荐阅读