有没有办法按列“uniq”?

新手上路,请多包涵

我有一个这样的 .csv 文件:

 stack2@domain.example,2009-11-27 01:05:47.893000000,domain.example,127.0.0.1
overflow@domain2.example,2009-11-27 00:58:29.793000000,domain2.example,255.255.255.0
overflow@domain2.example,2009-11-27 00:58:29.646465785,domain2.example,256.255.255.0
...

我必须从文件中删除重复的电子邮件(整行)(即上例中包含 overflow@domain2.example 的行之一)。如何仅在字段 1(以逗号分隔)上使用 uniq ?根据 manuniq 没有列选项。

我尝试了 sort | uniq 但它不起作用。

原文由 Eno 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 722
2 个回答
sort -u -t, -k1,1 file

  • -u 用于唯一
  • -t, 所以逗号是分隔符
  • -k1,1 用于关键字段1

测试结果:

 overflow@domain2.example,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0
stack2@domain.example,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1

原文由 Carl Smotricz 发布,翻译遵循 CC BY-SA 4.0 许可协议

awk -F"," '!_[$1]++' file

  • -F 设置字段分隔符。
  • $1 是第一个字段。
  • _[val] val _ (一个常规变量)。
  • ++ 递增,并返回旧值。
  • ! 返回逻辑非。
  • 最后有一个隐式打印。

原文由 ghostdog74 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题