unix - 如果存在重复的 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 可能不在排序顺序中。
解决方案
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
。
推荐阅读
- sql-server - 替换存储在列中的逗号分隔列表中的值
- python - 如何从位于 Odoo 11 表单的操作下拉列表中的按钮发送电子邮件?
- sql-server - 返回表中未找到的数据的查询
- django - 用于 mysql 替换的 Django 查询集
- django - 如何在保存我的 django 表单之前访问一些数据?
- python - 基于字典有效地替换数组中的元素 - NumPy / Python
- tomcat - 将eureka war server部署到tomcat8.5,但无法访问
- html - 获取所有 Firebase 子项和值并在 HTML 上显示
- android - 加载无效 url 时 Glide 崩溃应用程序
- entity - 如何在 Node.js 中使用会话实体编程?