如何在bash中删除双行

时间:2012-08-27 20:23:53

标签: linux bash line

给定像这样的长文本文件(我们将调用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中使用相同的行。你能告诉我这个命令吗?

3 个答案:

答案 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