我有这样一个列表(假设它是在summ.txt记忆):计数不同的元素
s1 d2
s1 d4
s3 d2
s4 d1
s1 d3
s4 d1
s5 d6
s3 d5
s1 d2
我需要获得,在第一列的每一个元素( s_
)第二个不同元素的数量(d_
)。在这种情况下:
s1 3
s3 2
s4 1
s5 1
我使用一个shell脚本获得此:
sor=`cat s.txt`
for d in $sor
do
n=$(grep $d ./summ.txt | cut -f2 | sort -u | wc -l)
echo $d, $n
done
哪里s.txt是文件包含所有不同s_
。在这种情况下,它将是:
s1
s2
s3
s4
s5
我知道这种方法是有效的,因为我试过了。主要问题是主列表(summ.txt)由大约1900万个元素组成,而不同的s_
大约有3千万个元素,所以计算所有元素需要太多时间。你能建议一个更快的算法吗?
+1这将是一个很好的代码高尔夫问题。 – Phil