如何用sort、cut、wc、uniq统计指定列的不同值数量?
解决方案:用sort、cut、wc、uniq统计第二列不同值数量
嗨,你已经找对思路啦,只是差在uniq的参数用法上!这里有两种符合你要求的实现方式,都能得到预期的结果5:
方法一:直接提取目标列后处理(更简洁)
这种方式不需要保留整行,直接针对第二列操作,步骤更短:
cut -d ' ' -f2 list.txt | sort -n | uniq | wc -l
分步解释:
cut -d ' ' -f2 list.txt:以空格为分隔符,提取文件中所有行的第二列(也就是数字部分)sort -n:对提取出的数字进行数值排序(uniq只能识别相邻的重复项,所以必须先排序)uniq:去除相邻的重复数字wc -l:统计去重后的行数,也就是第二列不同值的数量
方法二:贴合你的原始思路(整行处理后提取)
如果你想保留先排序整行的步骤,可以用uniq的-f参数跳过第一个字段(名字列),实现按第二列去重:
sort -k2n list.txt | uniq -f 1 | cut -d ' ' -f2 | wc -l
分步解释:
sort -k2n list.txt:按第二列的数值升序排序整行,让相同数字的行集中在一起uniq -f 1:-f 1表示跳过前1个字段(用空格分隔的名字),只比较从第二个字段开始的内容,这样相同数字的行只会保留第一行cut -d ' ' -f2:提取去重后的第二列数字wc -l:统计最终的行数,得到不同值的数量
两种方法都能完美解决你的问题,第一种因为直接针对目标列操作,会更高效哦~
内容的提问来源于stack exchange,提问作者Ulysses
相关产品推荐
相关产品推荐

