我搜索了这个任务,发现了以下较旧的问题:
但是我不能使用,awk
因为我的数据是一个复杂的 CSV 文件,有多个嵌套的双引号。
假设我想删除以下重复数据(简化案例):
Ref,xxx,zzz
ref1,"foo, bar, base",qux
ref1,"foo, bar, base",bar
ref2,aaa,bbb
在输出中我需要它如下:
Ref,xxx,zzz
ref1,"foo, bar, base",qux
ref2,aaa,bbb
没有awk
解决方案,只能使用任何 CSV 解析器。
我尝试了以下内容:
mlr --csv uniq -a -g Ref file.csv
但这是一个错误。
Miller 的
uniq
子命令返回具有确定唯一性的字段的唯一记录。任何其他字段都将被丢弃。您收到错误是因为子命令的-a
(使用所有字段)和-g
(使用特定字段)选项不兼容。已经给出了仅使用 Miller 的良好解决方案。在字段上分组时使用
head
子命令可能是最方便的解决方案。-n 1
Ref
您也可以让 Miller 使用与
awk
(!seen[$1]++
) 中常用的相同类型的操作,但由于 Miller 没有后增量运算符,因此它会稍微长一些:您还可以使用 Miller 将数据转换为 JSON,然后使用它
jq
来执行unique_by()
操作,然后让 Miller 将数据转换回 CSV:你可以跑
让第一行分组
Ref