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

Awk 删除某些重复行,同时保留其他行,awk,Awk,我试图删除文件中的大多数重复行(更准确地说,是脚本函数的管道输出),但希望保留其他包含特定模式的行。 我在这里和其他地方看到过 awk '!($1 in a){a[$1];print}' OR awk '!x[$0]++' 如果你想简单地删除每一个副本,那么这将是一个非常好的工作。 但是,可以很容易地将条件添加到该机制中吗 例如,我希望保留所有行,其中: $1==".:"||$1==":."||$1==":"||$1="." 但是,任何其他行,我都希望确保没有重复。 因此,在下面的示例中,我

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

awk '!($1 in a){a[$1];print}' OR
awk '!x[$0]++'
如果你想简单地删除每一个副本,那么这将是一个非常好的工作。 但是,可以很容易地将条件添加到该机制中吗

例如,我希望保留所有行,其中:

$1==".:"||$1==":."||$1==":"||$1="."
但是,任何其他行,我都希望确保没有重复。 因此,在下面的示例中,我想删除“/bin”和“/usr/bin”


谢谢

这应该适合您:

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

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

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。这怎么不是答案?建议使用awk命令行解决此问题。假设它工作正常(在我这边的一个快速测试中),它甚至是正确的。这是一个什么样的答案比贴在这个问题上的另外两个答案要少?
awk '($1==".:"||$1==":."||$1==":"||$1="."||!x[$0]++)' $file
$ awk '!seen[$0]++ || ($1 ~ /^(\.:|:\.|:|\./)$)' file     
/bin
:
/usr/bin
:
/usr/openwin/bin
:
:
/usr/etc
:
/etc
:.
:
a
:
/usr/bin/X11
:
.
:
: