给定像这样的长文本文件(我们将调用file.txt
):
EDITED
1 AA
2 ab
3 azd
4 ab
5 AA
6 aslmdkfj
7 AA
如何删除bash中同一文件中至少出现两次的行?我的意思是我希望得到这样的结果:
1 AA
2 ab
3 azd
6 aslmdkfj
在给定特定文本文件的情况下,我不希望在double中使用相同的行。你能告诉我这个命令吗?
答案 0 :(得分:9)
假设空白很重要,典型的解决方案是:
awk '!x[$0]++' file.txt
(例如,“ab”行不被视为与“ab”相同。如果您想以不同方式处理空白,则预处理数据可能最简单。)
- EDIT-- 鉴于修改后的问题,我将其解释为只想在给定列之后检查唯一性,尝试类似:
awk '!x[ substr( $0, 2 )]++' file.txt
这只会比较第2列到第2行,忽略第一列。这是一个典型的awk习惯用法:我们只是构建一个名为x
的数组(一个字母变量名在脚本中是一个可怕的想法,但对于命令行中的单行程是合理的),其中包含看到给定字符串的次数。第一次看到它,它被打印出来。在第一种情况下,我们使用$0
中包含的整个输入行。在第二种情况下,我们只使用包含在第二个字符之后的所有内容的子字符串。
答案 1 :(得分:7)
试试这个简单的脚本:
cat file.txt | sort | uniq
cat
将输出文件的内容
sort
会将重复的条目彼此相邻
uniq
将删除相邻的重复条目。
希望这有帮助!
答案 2 :(得分:4)
uniq
命令将执行您想要的操作。
但要确保文件先排序,它只检查连续的行。
像这样:
sort file.txt | uniq