Подсчет вхождений символа в текстовом файле - PullRequest
124 голосов
/ 22 октября 2009

Есть ли способ под linux / терминал для подсчета, сколько раз char f встречается в текстовом файле?

Ответы [ 5 ]

171 голосов
/ 22 октября 2009

Как насчет этого:

fgrep -o f <file> | wc -l

Примечание: Кроме того, гораздо легче запомнить / продублировать и настроить, это примерно в три раза (извините, редактировать! Испортил первый тест) быстрее, чем ответ Вереба.

62 голосов
/ 17 января 2013

еще быстрее:

tr -cd f < file | wc -c

Время для этой команды с файлом с 4,9 МБ и 1100000 вхождений искомого символа:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Время для ответа Вереба с echo, cat, tr и bc для одного и того же файла:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

Время для ответа Роба Хруски: tr, sed и wc для одного и того же файла:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

Время ответа Джефроми с fgrep и wc для того же файла:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
8 голосов
/ 22 октября 2009
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

где A - символ

Время для этой команды с файлом с 4,9 МБ и 1100000 вхождений искомого символа:

real   0m0.168s
user   0m0.059s
sys    0m0.115s
6 голосов
/ 11 мая 2010

Если все, что вам нужно сделать, это подсчитать количество строк, содержащих вашего персонажа, это будет работать:

grep -c 'f' myfile

Однако, он считает несколько вхождений 'f' в одной строке как одно совпадение.

3 голосов
/ 22 октября 2009

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

Замена двух вхождений «A» вашим персонажем и «file» вашим входным файлом.

  • tr -d '\n' < file: удаляет новые строки
  • sed 's/A/A\n/g: добавляет новую строку после каждого вхождения "A"
  • wc -l: подсчитывает количество строк

Пример:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
...