求助:Unix环境下如何删除连续重复行?
解决Unix下删除连续重复行的问题
嘿,我懂你要的是啥——只干掉连续重复的行,不是把所有重复行都删掉对吧?这在Unix环境里其实有几个超好用的工具能搞定,我给你捋几个最常用的方法:
方法一:用uniq命令(最直接)
uniq就是专门干这个活的!它默认的行为就是只删除连续出现的重复行,完全贴合你的需求。
基本用法
如果你的内容存在文件里(比如input.txt),直接运行:
uniq input.txt
要是想把结果保存到新文件:
uniq input.txt output.txt
如果内容是从其他命令的管道输出过来的,这么用就行:
cat input.txt | uniq
示例验证
比如你的输入:
This is not consecutive
This is consecutive
This is consecutive
This is consecutive
This is not consecutive
运行uniq后,输出就是:
This is not consecutive
This is consecutive
This is not consecutive
刚好把连续重复的3行This is consecutive压缩成1行,非连续的行全部保留,完美符合预期。
方法二:用awk脚本(更灵活)
如果需要自定义判断逻辑,或者不想依赖uniq,awk是个绝佳选择。这个脚本会逐行对比当前行和上一行,只有不一样的时候才打印:
awk 'prev != $0 {print; prev=$0}' input.txt
脚本解释
prev != $0:判断当前行($0)和上一行(存在变量prev里)是否不同- 如果不同,就打印当前行,然后把
prev更新为当前行的内容 - 第一行时
prev是空值,所以肯定会被打印出来
这个方法和uniq效果完全一致,但你可以轻松修改判断条件——比如想忽略大小写差异,改成tolower(prev) != tolower($0)就行。
额外小提示
- 用
uniq时想忽略大小写差异,加-i参数:uniq -i input.txt uniq -c还能显示每行的重复次数,比如会输出3 This is consecutive,调试的时候特别有用
内容的提问来源于stack exchange,提问作者Richard Adams
相关产品推荐
相关产品推荐

