如何删除bash中的双行

给定一个像这样的长文本文件(我们将调用file.txt ):

EDITED

 1 AA 2 ab 3 azd 4 ab 5 AA 6 aslmdkfj 7 AA 

如何删除在bash中同一个文件中出现至less两次的行? 我的意思是我想要得到这个结果:

 1 AA 2 ab 3 azd 6 aslmdkfj 

在给定特定的文本文件的情况下,我不希望双行有相同的行。 你能告诉我这个命令吗?

假设空白是重要的,典型的解决方案是:

 awk '!x[$0]++' file.txt 

(例如,“ab”行不认为与“ab”相同。如果要对空白进行不同的处理,可能最简单的方法是预处理数据)。

–EDIT–给定修改后的问题,我将解释为只想检查给定列之后的唯一性,请尝试如下所示:

 awk '!x[ substr( $0, 2 )]++' file.txt 

这将只比较第2列到行尾,忽略第一列。 这是一个典型的awk习惯用法:我们只是简单地构建一个名为x的数组(一个字母变量名在脚本中是一个可怕的想法,但对于命令行中的单行命令是合理的),它保存给定字符串的次数被看见。 第一次被看见,它被打印。 在第一种情况下,我们使用包含在$0的整个输入行。 在第二种情况下,我们只使用由第二个字符之后的所有字符组成的子字符串。

试试这个简单的脚本:

 cat file.txt | sort | uniq 

cat会输出文件的内容,

sort会把重复的条目彼此相邻

uniq会删除相邻的重复条目。

希望这可以帮助!

uniq命令将会做你想要的。

但要确保文件先排序,它只检查连续的行。

喜欢这个:

 sort file.txt | uniq