删除某些重复的行同时保留其他行

时间:2014-01-08 21:54:09

标签: awk

我试图删除文件中的大多数重复行(或者更准确地说是脚本函数的管道输出),但是希望保留其他包含某种模式的行。 在这里和其他地方看过

awk '!($1 in a){a[$1];print}' OR
awk '!x[$0]++'
如果你想简单地删除每一个副本,

工作得很好。 但是这个机制可以很容易地添加一个条件吗?

例如,我想将所有行保留在:

$1==".:"||$1==":."||$1==":"||$1="."

但是,任何其他行,我都希望确保不会重复。 所以在下面的例子中,我想删除“/ bin”和“/ usr / bin”。

/bin
:
/usr/bin
:
/usr/openwin/bin
:
/usr/bin
:
/usr/etc
:
/etc
:.
:
a
:
/usr/bin/X11
:
.
:
/bin
:

由于

3 个答案:

答案 0 :(得分:0)

这应该适合你:

awk '!($1 in a) || ($1 == ":") || ($1 == ":.") || ($1 == ".:") || ($1 == ".") {a[$1];print}'

答案 1 :(得分:0)

这有用吗?

awk '($1==".:"||$1==":."||$1==":"||$1="."||!x[$0]++)' $file

答案 2 :(得分:0)

$ awk '!seen[$0]++ || ($1 ~ /^(\.:|:\.|:|\./)$)' file     
/bin
:
/usr/bin
:
/usr/openwin/bin
:
:
/usr/etc
:
/etc
:.
:
a
:
/usr/bin/X11
:
.
:
: