shell删除⽂本中的重复⾏
三种常见⽅法:
第⼀,⽤sort+uniq,注意,单纯uniq是不⾏的。
shell> sort -k2n file | uniq > a.out
这⾥我做了个简单的测试,当file中的重复⾏不再⼀起的时候,uniq将服务删除所有的重复⾏。经过排序后,所有相同的⾏都在相邻,因此unqi可以正常删除重复⾏。
第⼆,⽤sort+awk命令,注意,单纯awk同样不⾏,原因同上。
shell> sort -k2n file | awk ‘{if ($0!=line) print;line=$0}’
当然,⾃⼰把管道后⾯的代码重新设计⼀下,可能不需要sort命令先排序拉。
第三,⽤sort+sed命令,同样需要sort命令先排序。
shell> sort -k2n file | sed ‘$!N; /^\(.*\)\n\1$/!P; D’
最后附⼀个必须先⽤sort排序的⽂本的例⼦,当然,这个需要⽤sort排序的原因是很简单,就是后⾯算法设计的时候的“局部性”,相同的⾏可能分散出现在不同的区域,⼀旦有新的相同⾏出现,那么前⾯的已经出现的记录就被覆盖了,看了这个例⼦就好理解拉。
ffffffffffffffffff
ffffffffffffffffff
eeeeeeeeeeeeeeeeeeee
fffffffffffffffffff
用sort outeeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeee
gggggggggggggggggggg
其实,这是我随便打进去的⼏⾏字,没想到就是必须⽤sort的很好例⼦,⼤家可以⾃⼰试试看。