Есть ли способ в linux / terminal подсчитать, сколько раз char f встречается в текстовом файле?
Есть ли способ в linux / terminal подсчитать, сколько раз char f встречается в текстовом файле?
Ответы:
Как насчет этого:
fgrep -o f <file> | wc -l
Примечание: помимо того, что намного проще запоминать / дублировать и настраивать, это примерно в три раза (извините, редактировать! Испортил первый тест) быстрее, чем ответ Вереба.
\r
или \n
символы; tr -cd f
ответ делает работу для этого.
a
, b
и c
используйте egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
как в tr
ответе: поскольку grep
выходные данные построчно, wc
конец строк будет считаться как символы (следовательно, количество символов удваивается).
\r
, но чтобы посчитать, \n
почему бы просто не использовать 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
Время для Rob Hruška ответа с tr
, sed
и wc
для того же файла:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Пора Джефроми ответить с тем же файлом fgrep
и wc
для него:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a
, b
и c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
вместо этого
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
cat
s, указав имя файла в качестве аргумента wc
и tr
.
stdin
, но это может быть cat
tr -d 'A' < <file> | wc ...
Если все, что вам нужно сделать, это подсчитать количество строк, содержащих вашего персонажа, это сработает:
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
: добавляет новую строку после каждого появления "A"wc -l
: подсчитывает количество строкПример:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9