Хорошо, это не красиво, но по крайней мере это работает.
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
организует в порядке убывания