我有一个包含如下行的文本文件:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
我如何确定每一行的唯一性?
注意:目标是测试文件,而不是在存在重复行时对其进行修改。
awk 解决方案:
使用
sort
/uniq
:要仅检查重复行,请使用
-d
uniq 选项。这将只显示重复的行,如果没有,它将不显示任何内容:TLDR
最初的问题不清楚,并且读到 OP 只是想要一个文件内容的唯一版本。如下所示。在问题的自更新形式中,OP 现在声明他/她只是想知道文件的内容是否唯一。
测试文件的内容是否唯一
您可以简单地使用
sort
来验证文件是否唯一或包含重复文件,如下所示:例子
假设我有这两个文件:
重复样本文件 独特的样本文件现在,当我们分析这些文件时,我们可以判断它们是唯一的还是包含重复的:
测试重复文件 测试唯一文件原始问题(文件的唯一内容)
只需
sort
:我通常
sort
是文件,然后uniq
用来计算重复项的数量,然后我sort
再次在列表底部看到重复项。我在您提供的示例中添加了一份副本:
由于我有一段时间没有阅读手册页
uniq
,所以我快速查看了任何替代方案。如果您只想查看重复项,则以下内容无需进行第二次排序:如果没有重复,则所有行都是唯一的:
说明:对文件行进行排序以使重复行连续(排序)
提取所有相等的连续行(uniq -d)。
如果上面的命令有任何输出 (
[...]
),则 (&&
) 打印一条消息。如果没有 Perl 答案,这将是不完整的!
这将打印每个非唯一行一次:因此,如果它什么都不打印,则该文件具有所有唯一行。
使用
cmp
和sort
在bash
:或者
不过,这将对文件进行两次排序,就像接受的答案一样。