给定一个像这样的长文本文件(我们将调用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