有很多方法可以从Linux上的文本文件中删除重复线,但是这两个涉及尴尬和uniq命令和结果略有不同。
用尴尬删除重复线条
我们将在这篇文章中检查的第一个命令是非常不寻常的尴尬命令这系统地删除了遇到不止一次的文件中的每一行。它使该行的第一个实例完好无损,但是“记住”了该行,并删除了后来遇到的任何重复。
这是一个例子。最初,该文件看起来像这样:
从前,有一位可爱的公主,脾气暴躁。每当她去散步时,她都会离开城堡微笑,但是如果她遇到任何皱着眉头或与其他人吵架的人,她停下来了,做出了愤怒的脸。继续阅读,如果公主遇到了一个不想和她聊天的朋友,她停下来了,表现得很生气。<==将被删除继续阅读<==将被删除
这尴尬这样做的命令看起来像这样:
$ awk'!x [$ 0] ++'grouchy_princess从前,有一位可爱的公主脾气暴躁。每当她去散步时,她都会离开城堡微笑,但是如果她遇到任何皱着眉头或与其他人吵架的人,她停下来了,做出了愤怒的脸。如果公主遇到一个不想和她聊天的朋友,继续阅读
请注意,现在每条重复的线条仅在其初始位置仅显示一次。
实际上,如果您只想看到任何重复的行,则只需要以较小的方式更改命令即可。只需删除感叹号(表示“不”),您只会看到重复的行:
$ awk'x [$ 0] ++'grouchy_princess她停了下来,发了愤怒的脸。继续阅读
唯一的问题awk'!x [$ 0] ++'命令是,并不是那么容易记住。另一方面,将命令变成一个简单的脚本也并不难。我的看起来像这样:
$ cat rmdups#!/bin/bash
awk'!x [$ 0] ++'$ 1
awk命令从提供的任何文件中删除了重复的行。如果要将输出保存到文件而不是显示文件,请使其看起来像这样:
#!/bin/bash
awk'!x [$ 0] ++'$ 1> $ 1-new
您可以使用诸如“ RMDUPS地址”之类的命令运行显示的脚本。如果您使用第二版,则将添加到原始文件名的“ -new”的文件包含输出。
用UNIQ删除重复线
如果您不需要保留文件中的行的顺序,请使用种类和uniq命令将以非常简单的方式完成您需要的事情。这种类命令按字母顺序排序行。这uniq命令确保将顺序相同的线简化为一条。
$ stort grouchy_princess |uniq但是,如果她遇到皱着眉头或与其他人吵架的人,请继续阅读公主是否遇到一个不想和她聊天的朋友,曾几何时,就会有一位可爱的公主脾气暴躁。她停了下来,发出了生气的脸。每当她去散步时,她都会离开城堡微笑,
此外,如果对文件内容的内容进行排序很有帮助,则此方法可能是理想的。尽管这项技术与童话故事没有很好的作用,但它可以很好地适合与会者,杂货店购物清单等的列表。
这种联合使用的种类和uniq周围的文件名是指类似于别名的命令,但可以将其变成这样的简单脚本:
#!/bin/bash如果[$#== 1];然后,如果[-f $ 1];然后排序$ 1 |Uniq fi fi
该脚本验证提供了一个参数,并且它是对其进行分类之前的现有文件,并将输出发送到uniq命令。
包起来
如显示的命令在清理或验证文本文件的内容方面非常有帮助,尤其是您不希望任何行以多次显示的列表。将命令变成脚本使他们可以方便地在可能会有帮助时致电它们。