我正在尝试使用unix中的基本shell来计算2个字段中的唯一值。我有5列的数据,但只需要计算前两个中的唯一值,不要连接它们。 到目前为止,我成功地使用了cut -f 1 |排序| uniq | wc -l计算第一列中的唯一值,我可以对第二列执行相同的操作,但因为第一列和第二列中的某些值相同,我需要能够执行此命令将第1列和第2列视为一领域。有人可以帮帮我吗?
答案 0 :(得分:1)
你的问题可以用两种方式解释,所以我回答它们。
给定输入文件:
2 1
2 1
1 2
1 1
2 2
如果您希望结果输出 4 ,因为唯一对是1 1
,1 2
,2 1
和2 2
,那么您需要:
cat test|cut -f1,2|sort|uniq|wc -l
我们在这里做的是:我们只挑选前两列以及分隔符,并将其传递给sort|uniq
,这样就完成了工作。
另一方面,如果您希望结果输出 2 ,因为只有两个独特元素:1
和2
,那么您可以调整以上内容像这样:
cat test|cut -f1,2|tr "\t" "\n"|sort|uniq|wc -l
这次我们选择前两列后,我们将它们分成两行,以便sort|uniq
选择它们。
只要列用TAB字符分隔,而不是空格,这些就可以工作。由于您未在问题中将-d
选项传递给cut
,而cut
默认情况下使用了标签,因此我假设您的输入也使用了标签。