根据特定列识别 CSV 上的唯一记录

根据特定列识别 CSV 上的唯一记录

如果输入是

foo,bar,baz
bar,baz,qux
qux,quux,baz
bar,foo,qux
waldo,fred,garply

输出应该是

foo,bar,baz
bar,baz,qux
waldo,fred,garply

正如您所看到的,记录是根据第三列的值进行重复数据删除的。如果多个记录具有相同的第三列值,则随机选择一个(或第一个;无关紧要)

答案1

awk 的惯用答案是awk -F, '!seen[$3]++' file

第一次在第三列中看到一个值时,将打印一行。

答案2

如果您不关心输出的顺序,可以直接使用sort,如下所示。

  • -t,将字段分隔符设置为“,”
  • -k3将排序键定义为第三个字段
  • -u表示只需要唯一的结果

    $ sort -t, -k3 -u file
    foo,bar,baz
    waldo,fred,garply
    bar,baz,qux
    $
    

相关内容