我想删除连续的重复行。即,例如
**test.txt**
car
speed is good
bike
slower than car
plane
super fast
super fast
bullet train
super fast
这将删除除第一次出现以外的所有重复行。
perl -ne 'print unless $a{$_}++'
但我希望输出是
**test.txt**
car
speed is good
bike
slower than car
plane
super fast
bullet train
super fast
我试过这个oneliner,但这并没有做什么,只是打印输入。
perl -00 -F'<\w+>|</\w+>' -i.bak -lane 'foreach(@F){if ($_=~/\w+/ && ($a ne $_)){print "$_";$a=$_;}}'
怎么做???
答案 0 :(得分:10)
为什么不使用uniq
?
uniq file.txt
结果:
car
speed is good
bike
slower than car
plane
super fast
bullet train
super fast
您也可以使用awk
:
awk 'line != $0; { line = $0 }' file.txt
答案 1 :(得分:5)
$ perl -ne 'print $_ unless $_ eq $prev; $prev = $_'
答案 2 :(得分:5)
尝试:
perl -ne 'print unless (defined($prev) && ($_ eq $prev)); $prev=$_'
答案 3 :(得分:0)
我还想跟踪有多少重复项被抑制,只跳过连续重复项。
虽然这不是OP所要求的,但这是其他人可能认为有用的变体:
perl -ne 'if (defined($pr) && ($_ eq $pr)) {$cnt++;} else {print "... (+$cnt)\n" if ($cnt); print; $cnt=0; $pr=$_;}'
它使用我的数据(数据库恢复日志)生成了类似的内容:
COPY 9
COPY 0
... (+2)
COPY 5
COPY 0
... (+1)
COPY 24
ALTER TABLE
... (+23)
CREATE INDEX
... (+73)