Bash 如何在保持行顺序的同时删除重复行?

Bash 如何在保持行顺序的同时删除重复行?,bash,command-line,duplicates,unique,Bash,Command Line,Duplicates,Unique,我知道我可以使用sort--unique删除文本文件(或标准输入)中的重复行。但是-如果我想保持原始的行顺序呢 我知道,如果重复项恰好是连续的,uniq起作用;但在我的例子中,两个副本之间的距离可能会更远 另外,我意识到我可以用C或者Python编写一个小程序来实现这一点,但我希望用bash来实现这一点。一个简单的解决方案是将bash字典作为一个集合,并在其中添加行。。。但我怀疑这是否能很好地扩展 仅举例说明: 原始文件 重复删除后 一个两个五个两个两个四个 一个两个五个四个 使用awk,创建一

我知道我可以使用
sort--unique
删除文本文件(或标准输入)中的重复行。但是-如果我想保持原始的行顺序呢

我知道,如果重复项恰好是连续的,
uniq
起作用;但在我的例子中,两个副本之间的距离可能会更远

另外,我意识到我可以用C或者Python编写一个小程序来实现这一点,但我希望用bash来实现这一点。一个简单的解决方案是将bash字典作为一个集合,并在其中添加行。。。但我怀疑这是否能很好地扩展

仅举例说明:

原始文件 重复删除后 一个
两个
五个
两个
两个
四个
一个
两个
五个
四个



使用awk,创建一个名为map的数组,并将该行作为索引。只有在数组中没有行的条目时,我们才会打印该行。

您可以添加一个示例吗?@RamanSailopal:Done.awk是一个选项吗?这是一个简洁的解决方案,但需要在内存中保存整个文件/输入流的副本。那太贵了。不管怎样,+1。
awk '!map[$0] { print } { map[$0]="1" }' file