如何计算2个字段中的唯一值而不连接它们?

时间:2015-06-22 05:27:02

标签: linux field uniq

我正在尝试使用unix中的基本shell来计算2个字段中的唯一值。我有5列的数据,但只需要计算前两个中的唯一值,不要连接它们。 到目前为止,我成功地使用了cut -f 1 |排序| uniq | wc -l计算第一列中的唯一值,我可以对第二列执行相同的操作,但因为第一列和第二列中的某些值相同,我需要能够执行此命令将第1列和第2列视为一领域。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

你的问题可以用两种方式解释,所以我回答它们。

给定输入文件:

2       1
2       1
1       2
1       1
2       2

如果您希望结果输出 4 ,因为唯一对是1 11 22 12 2,那么您需要:

cat test|cut -f1,2|sort|uniq|wc -l

我们在这里做的是:我们只挑选前两列以及分隔符,并将其传递给sort|uniq,这样就完成了工作。

另一方面,如果您希望结果输出 2 ,因为只有两个独特元素:12,那么您可以调整以上内容像这样:

cat test|cut -f1,2|tr "\t" "\n"|sort|uniq|wc -l

这次我们选择前两列后,我们将它们分成两行,以便sort|uniq选择它们。

只要列用TAB字符分隔,而不是空格,这些就可以工作。由于您未在问题中将-d选项传递给cut,而cut默认情况下使用了标签,因此我假设您的输入也使用了标签。