如何使用 perl 脚本从文件中删除选定的重复行
How to delete selected duplicated line from file using perl script
假设我的文件 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
但它正在删除所有重复的行。
要仅删除特定(“目标”)行的重复项,请添加该条件
perl -lne'$tgt = "ee"; print unless $h{$_}++ and $_ eq $tgt' file
如果可能有多个这样的目标,则检查当前行是否匹配其中任何一个。一个很好的工具是来自 List::Util
的 any
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
中。
假设我的文件 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
但它正在删除所有重复的行。
要仅删除特定(“目标”)行的重复项,请添加该条件
perl -lne'$tgt = "ee"; print unless $h{$_}++ and $_ eq $tgt' file
如果可能有多个这样的目标,则检查当前行是否匹配其中任何一个。一个很好的工具是来自 List::Util
的any
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
中。