Хорошо, это не красиво, но по крайней мере это работает.
cat restaurants.txt | sed 's/;.*//' | tr "," "\n" | tr " " "\n" | grep -v '^$' | sort | uniq -c | sort -r
2 Sam
2 Max
1 Shelly
1 Sarah
1 Kellyn
1 Jasmine
1 Helen
Объяснение:
sed 's/;.*//' удаляет весь текст после точки с запятой, как (; Applebees)
tr "," "\n" uniq работает только на одну строку, поэтому заменяйте запятые на новые строки
tr " " "\n" очищает все лишние пробелы, предоставляя им собственную строку (необязательно)
grep -v '^$' Удаляет все пустые строки
sort сортирует
uniq -c подсчитывает дубликаты
sort -f организует в порядке убывания