【问题标题】:Linux: Dedupe based on specific fieldsLinux:基于特定字段的重复数据删除
【发布时间】:2019-04-26 20:09:26
【问题描述】:

我有一个 CSV 文件,我需要在其中删除 FIRST 字段匹配的条目,即使其他字段不匹配也是如此。此外,剩下的行应该是日期最高的其他字段之一所在的行。

这是我的数据的样子:

"47917244","000","OTC","20180718","7","2018","20180719","47917244","20180719"
"47917244","000","OTC","20180718","7","2018","20180731","47917244","20180731"
"47917244","000","OTC","20180718","7","2018","20180830","47917244","20180830"

所有 3 行在第一个字段中具有相同的值。第 9 个字段是一个日期字段,我想对它进行重复数据删除,保留日期值最高的第三行,但删除其他两行。

【问题讨论】:

  • 您检查了uniq-f 标志吗?
  • 如果您发布您迄今为止尝试过的内容,您将获得更好的结果。
  • @accdias 这与他想要的相反。 -f 1 忽略第一个字段,但第一个字段是他想要唯一的字段。
  • @Barmar,我说要检查 -f 而不是 -f 1
  • 来自man uniq 关于-f 标志:“避免比较前N 个字段” 也许我遗漏了一些东西,但是当它是“操作需要比较的前 N ​​个字段。 Sort 显然会产生更好的结果。

标签: linux sorting uniq


【解决方案1】:

在检查了另一个 stackoverflow 帖子 (Is there a way to 'uniq' by column?) 后,我通过混合使用 sort 和 awk 来使其工作:

sort -t, -u -k1,1 -k9,9 <file> |
    awk -F',' '{ x[$1]=$0 } END { for (i in x) print x[i] }'

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 2019-01-31
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2019-03-08
    • 2017-02-10
    相关资源
    最近更新 更多