2

给定一个像这样的长文本文件(我们称之为file.txt):

已编辑

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

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

1 AA
2 ab
3 azd
6 aslmdkfj

给定一个特定的文本文件,我不想在双精度中使用相同的行。你能告诉我命令吗?

4

3 回答 3

9

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

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

(例如,“ab”行与“ab”不同。如果您想以不同的方式处理空白,预处理数据可能是最简单的。)

--EDIT-- 鉴于修改后的问题,我将其解释为只想在给定列之后检查唯一性,请尝试以下操作:

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

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

于 2012-08-27T20:27:37.143 回答
8

试试这个简单的脚本:

cat file.txt | sort | uniq

cat将输出文件的内容,

sort将重复的条目彼此相邻

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

希望这可以帮助!

于 2012-08-27T20:26:58.573 回答
4

uniq命令将执行您想要的操作。

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

像这样:

sort file.txt | uniq
于 2012-08-27T20:25:55.427 回答