【问题标题】:get unique combination of values of two columns获取两列值的唯一组合
【发布时间】:2021-07-27 17:22:14
【问题描述】:

我可以使用以下命令从 col 获取唯一值

cut -d',' -f3 file.txt | uniq -c.

这给了我在字段 3 中的唯一值。

但如果我想获得两个字段的唯一组合,我该如何获得呢?

输入

A,B,C
B,C,D
D,B,C
H,C,D
K,C,D

输出

2 B,C
3 C,D

【问题讨论】:

  • 使用另一个命令进行预处理以连接第 2 + 3 列,然后通过 cut 和 uniq(您现在拥有的确切命令)传递结果。

标签: shell cut


【解决方案1】:

您可以使用-f 2-3-f 2,3 指定字段范围

cut -d',' -f2-3 file.txt | sort | uniq -c

uniq 不会检测重复行,除非它们是相邻的。在使用 uniq 命令之前应该对输入进行排序

输出

2 B,C
3 C,D

【讨论】:

    【解决方案2】:

    您可能会发现在处理输入时提供更大灵活性的另一个选项是awk。您可以使用相关字段的串联作为数组的索引来汇总每个唯一字段组合的出现次数,然后使用END 规则输出结果,例如

    awk -F, '{a[$2","$3]++} END{for(i in a)print a[i], i}' file
    

    使用/输出示例

    使用input 中的示例文件,您将拥有:

    $ awk -F, '{a[$2","$3]++} END{for(i in a)print a[i], i}' input
    3 C,D
    2 B,C
    

    awk 数组是关联的而不是索引的,但是如果需要,您可以使用第三个数组来保留出现的顺序。或者,您可以简单地将输出通过管道传输到sort,按照您喜欢的任何顺序。

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多