Подсчитайте количество вхождений символа char в обычный текстовый файл
Вопрос
Есть ли какой-нибудь способ в linux / terminal подсчитать, сколько раз символ f встречается в обычном текстовом файле?
Решение
Как насчет этого?
fgrep -o f <file> | wc -l
Примечание. Кроме того, гораздо легче запомнить / продублировать и настроить, это примерно в три раза (извините, редактировать! испортил первый тест) быстрее, чем ответ Вереба.
Другие советы
еще быстрее:
tr -cd f < file | wc -c
Время для этой команды с файлом с 4,9 МБ и 1100000 вхождений искомого символа:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Время для ответа Vereb с echo
, cat
, tr
и bc
для одного и того же файла:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Время для ответа Роба Хруски с sed
, wc
и fgrep
для одного и того же файла:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Время для ответа Джефроми с <=> и <=> для одного и того же файла:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
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
Если вам нужно только сосчитать количество строк, содержащих вашего персонажа, это сработает:
grep -c 'f' myfile
Тем не менее, он считает несколько вхождений 'f' в одной строке как одно совпадение.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Замените два вхождения "A" вашим символом, а "file" - вашим входным файлом.
tr -d '\n' < file
:удаляет новые строкиsed 's/A/A\n/g
:добавляет перевод строки после каждого вхождения буквы "А".wc -l
:подсчитывает количество строк
Пример:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9