Если вы настаиваете на использовании Bash, у него есть ассоциативные массивы . Я не совсем уверен, как бы вы отсортировали их в обычном bash, и использование только звуков bash немного сложнее для этого. Возможно, awk
будет работать лучше?
В Bash вместо оригинального подхода я бы сделал это с помощью трубопровода:
cut
(чтобы выбрать столбец, как выуже сделано) sort
(для сортировки значений, чтобы их можно было обработать с помощью uniq
) uniq -c
(для подсчета количества вхождений в значении одного столбца) sort -nr
(для сортировки по количеству вхождений, по убыванию - по возрастанию) head
(для получения только наиболее частых)
Что-то вроде (не проверено):
cut -d \; -f 4 input.csv \
| sort \
| uniq -c \
| sort -nr \
| head -1
Если вам нужно отфильтровать некоторые строки, я бы добавил grep -v
после cut
. Не нужно использовать условные операторы, пока циклы, read
встроены. \
в конце строки говорит bash, что эта «строка» продолжается на следующей строке.
Выше было то, что впервые произошло со мной. Конечно, его можно оптимизировать, но, опять же, возможно, вам следует искать другие языки программирования или парадигмы, если это необходимо выполнять часто и максимально быстро.