bash - 使用 awk 消除基于两列的重复行
问题描述
鉴于此输入:
# 133 15
KBL 40.385 26.385 1.0000 S
KBL 23.846 9.289 1.0000 P
KBL 40.234 26.385 1.0000 S
# 133 4
KBL 40.234 28.566 1.0000 S
KBL 40.385 28.566 1.0000 S
KBL 23.846 12.032 1.0000 P
我希望删除重复的行,特别是在第 2 列或第 3 列上重复的值。换句话说,我希望得到这个输出:
# 133 15
KBL 40.385 26.385 1.0000 S
KBL 23.846 9.289 1.0000 P
# 133 4
KBL 40.234 28.566 1.0000 S
KBL 23.846 12.032 1.0000 P
我试过了awk '!a[$0]++' file.xy
。但是,这只会删除完全相同的行。我希望只删除在第二列或第三列中具有重复值的行。
使用 awk,删除这些重复行的最佳方法是什么?谢谢。
解决方案
假设您希望打印以 # 开头的行,不希望在重复值的测试中考虑它们的 $2 或 $3 值,并且只想消除每个单独的#
-line 分隔块中的重复项:
$ awk '/^#/{print; delete seen; next} !(seen[$2]++ || seen[$3]++)' file
# 133 15
KBL 40.385 26.385 1.0000 S
KBL 23.846 9.289 1.0000 P
# 133 4
KBL 40.234 28.566 1.0000 S
KBL 23.846 12.032 1.0000 P
推荐阅读
- ios - 如何手动执行使用 rx 观察到的 UITextField 编辑操作?
- wpf - 如何通过在wpf中选择形状来缩放形状
- css - 从谷歌字体导入时字体粗细不起作用
- java - 添加新列后更新旧实体的数据
- php - 根据使用的 Wordpress 模板包含 PHP 文件
- tensorflow - 使用keras进行图像分类时如何稳定loss
- go - 如何避免golang中的堆栈溢出?
- python - 应用没有 Lambda 参数的函数 Pandas DataFrame
- presto - 如何使用 presto-parser 从 Presto 查询中获取表名?
- python-requests - Python Instagram 使用请求登录