У меня есть такой список (скажем, он запоминается в 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
Я использую сценарий оболочки для получения этого:
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) состоит из примерно 19 миллионов элементов, а число различных s_
составляет около 3 миллионов, поэтому для вычисления всех потребуется слишком много времени.Можете ли вы предложить более быстрый алгоритм?