获取两列值的唯一组合

时间:2021-07-27 17:22:14

标签: shell cut

我可以使用以下命令从 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 个答案:

答案 0 :(得分:1)

您可以使用 -f 2-3-f 2,3

指定字段范围
cut -d',' -f2-3 file.txt | sort | uniq -c

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

输出

2 B,C
3 C,D

答案 1 :(得分:0)

您可能会发现在处理输入时提供更大灵活性的另一个选项是 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,按照您喜欢的任何顺序进行。