【发布时间】:2016-10-18 15:17:13
【问题描述】:
我想知道是否有一种简单的方法可以在包含许多条目(大约 200.000 或更多)的文本文件中找到重复的行,并输出带有重复行号的文件,从而保持源文件的完整性。例如,我得到一个文件,其中包含这样的推文:
1. i got red apple
2. i got red apple in my stomach
3. i got green apple
4. i got red apple
5. i like blue bananas
6. i got red apple
7. i like blues music
8. i like blue bananas
9. i like blue bananas
我希望输出是一个单独的文件,如下所示:
4
6
8
9
其中数字将指示具有重复条目的行(不包括第一次出现的重复项)。另请注意,匹配模式必须是完全相同的句子(如第 1 行与第 2 行不同,第 5 行与第 7 行不同等等)。
我在sort | uniq 中找到的所有内容似乎都与整个句子不匹配,而只与句子的第一个单词匹配,所以我正在考虑 awk 脚本是否更适合此任务,或者是否有另一种类型的可以做到这一点的命令。
我还需要第一个文件是完整的(不以任何方式排序或重新排序)并且只获取如上所示的行号,因为我想从两个文件中手动删除这些行。第一个文件包含推文,第二个文件包含这些推文的标签,所以我想删除两个文件中包含重复推文的行,保留第一次出现。
【问题讨论】:
-
第一个文件是否真的包含行号,还是只是为了说明?
-
@BenjaminW。不,它没有。我猜你的解决方案只用 sort without -k 2 就行了?
-
我的解决方案假定没有行号,并使用
nl添加它们。-k 2是必需的。
标签: linux shell awk duplicates