Я бы использовал grep
с -o
, чтобы вывести только совпадающий верхний фрагмент строки. слова:
$ for file in *; do
printf '%s : %s\n' "$(grep -Eo '[[:alnum:]]+' "$file" | sort | uniq -c |
sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3
В качестве альтернативы, если ваш grep
не поддерживает -o
, вы можете использовать tr
для замены всех пробелов и знаков препинания на ] \ n
, фильтровать через grep.
, чтобы пропустить пустые строки и затем подсчитать:
$ for file in *; do
printf '%s : %s\n' "$(tr '[[:punct:]][[:space:]]' '\n' < "$file" | grep . |
sort | uniq -c | sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3