В истинном духе bash, вот серия команд для достижения этой цели:)
echo 'max 2.3
henry 3
fransis 4.5
max 2.3
henry 3
max 2.3' | \
sort | \
uniq -c | \
while read count name value
do echo "$name" $(bc <<< "$count * $value")
done | \
sort -r -k 2
sort | uniq -c
подсчитает количество одинаковых строк и выдаст такой список:
1 fransis 4.5
2 henry 3
3 max 2.3
Этот список передается в цикл while
, который читает 3 значения одновременно (read count name value
)
Для каждого набора из 3 значений выводятся имя и результат умножения:
echo "$name" $(bc <<< "$count * $value")
Затем результат сортируется так, чтобы наивысшая оценка была наверху, то есть обратная сортировка во втором столбце:
sort -r -k 2
Все это предполагает, что входной файл "правильно сформирован", без искаженных строк или лишних пробелов.