如何在vim中删除密切重复的行

时间:2013-11-12 21:30:54

标签: unix vim duplicate-removal cut

我有以下几行:

123 abcd 456 xyz
123 abcd 678 xyz
234 egfs 434 ert
345 fggfgf 456 455 rty
234 egfs 422 ert 33

所以在这里,如果第一个字段对于多行是相同的,则认为它们是重复的。因此,在上面的例子中,123在2行中是相同的,它们被认为是重复的(尽管它们在中间的一个字段中不同)。类似地,具有234的行是重复的。 我需要删除这些重复的行。

由于它们不是100%重复,sort u不起作用。有谁知道我怎么能删除这些重复的行?

3 个答案:

答案 0 :(得分:7)

对于awk来说,这将是一项非常简单的任务,我会用awk来做。在vim中,您可以这样做:

% !awk '\!a[$1]++'
然后你得到了:

123 abcd 456 xyz
234 egfs 434 ert
345 fggfgf 456 455 rty

如果你在shell中执行,则不必逃避!

awk '!a[$1]++' file

答案 1 :(得分:0)

g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d

答案 2 :(得分:0)

我的PatternsOnText plugin很容易。它允许指定重复检查忽略的模式;在你的情况下,这将是第一个(空格分隔)字段之后的所有内容:

%DeleteDuplicateLinesIgnoring / .*/