首页 > 解决方案 > 如果存在重复的 id 列,则从管道分隔文件中删除带有特定标志的行

问题描述

考虑一个管道分隔的文件,

文件

id1|name|address|yes
id2|name|address|yes
id2|name|address|no
id3|name|address|yes

第一列是“id”,最后一列是标志。如何删除具有重复 id (id2) 并标记为“否”的行?

预期输出:

id1|name|address|yes
id2|name|address|yes
id3|name|address|yes

我尝试使用 awk 来获取重复项

awk -F'|' 'NR==FNR{cnt[$1]++; next} cnt[$1]>1' file file

如何删除线?

注意:文件将有 1000 行,并且 id 可能不在排序顺序中。

标签: unixawk

解决方案


awk -F'|' '!a[$1]++ && $NF != "no"' file
id1|name|address|yes
id2|name|address|yes
id3|name|address|yes

简要说明:
-F'|':设置字段分隔符为|
!a[$1]++:如果第一列以前从未见过,则为真
&&: AND
$NF != "no":最后一列不等于no


推荐阅读