Linux: 基于特定字段的去重
Linux: Dedupe based on specific fields
我有一个 CSV 文件,我需要在其中删除第一个字段匹配的条目,即使其他字段不匹配也是如此。此外,剩下的行应该是日期最高的其他字段之一。
这是我的数据:
"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 个字段是一个日期字段,我希望以这样的方式对它进行重复数据删除,即保留具有最高日期值的第三行,但删除其他两行。
在检查了另一个 Whosebug post (Is there a way to 'uniq' by column?) 之后,我通过混合使用 sort 和 awk 使其工作:
sort -t, -u -k1,1 -k9,9 <file> |
awk -F',' '{ x[]=[=10=] } END { for (i in x) print x[i] }'
我有一个 CSV 文件,我需要在其中删除第一个字段匹配的条目,即使其他字段不匹配也是如此。此外,剩下的行应该是日期最高的其他字段之一。
这是我的数据:
"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 个字段是一个日期字段,我希望以这样的方式对它进行重复数据删除,即保留具有最高日期值的第三行,但删除其他两行。
在检查了另一个 Whosebug post (Is there a way to 'uniq' by column?) 之后,我通过混合使用 sort 和 awk 使其工作:
sort -t, -u -k1,1 -k9,9 <file> |
awk -F',' '{ x[]=[=10=] } END { for (i in x) print x[i] }'