2

我有以下几行:

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因此不起作用。有谁知道我如何删除这些重复的行?

4

3 回答 3

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
于 2013-11-12T22:02:03.793 回答
0
g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d
于 2013-11-12T21:54:56.003 回答
0

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

%DeleteDuplicateLinesIgnoring / .*/
于 2013-11-13T09:24:50.273 回答