Технически это можно рассматривать как sh / bash / etc. вопрос программирования, так что я думаю, что он справедлив в любом месте.
Роб Хруска,
@Rob Hruska: да, я тоже думаю, что это программирование на bash ... @abrashka: ответ на ваш первый и второй вопрос - "НЕТ"!
cupakob
Ответы:
178
Как насчет этого:
fgrep -o f <file> | wc -l
Примечание: помимо того, что намного проще запоминать / дублировать и настраивать, это примерно в три раза (извините, редактировать! Испортил первый тест) быстрее, чем ответ Вереба.
Этот не работает, если вам нужно считать \rили \nсимволы; tr -cd fответ делает работу для этого.
bjnord 05
3
Рассчитывать несколько символов, например a, bи cиспользуйте egrep: egrep -o 'a|b|c' <file> | wc -l.
Скиппи ле Гран Гуру,
Кроме того, будьте осторожны, чтобы НЕ использовать, wc -cкак в trответе: поскольку grepвыходные данные построчно, wcконец строк будет считаться как символы (следовательно, количество символов удваивается).
Скиппи ле Гран Гуру
@bjnord Хорошо \r, но чтобы посчитать, \nпочему бы просто не использовать wc -l?
Скиппи ле Гран Гуру,
68
даже быстрее:
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для него:
Ответы:
Как насчет этого:
Примечание: помимо того, что намного проще запоминать / дублировать и настраивать, это примерно в три раза (извините, редактировать! Испортил первый тест) быстрее, чем ответ Вереба.
источник
\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
?даже быстрее:
Время для этой команды с файлом размером 4,9 МБ и 1100000 вхождений искомого символа:
Время для ответа Vereb с
echo
,cat
,tr
иbc
для того же файла:Время для Rob Hruška ответа с
tr
,sed
иwc
для того же файла:Пора Джефроми ответить с тем же файлом
fgrep
иwc
для него:источник
a
,b
иc
:tr -cd abc < file | wc -l
.tr -cd abc < file | wc -c
вместо этогогде A - символ
Время для этой команды с файлом размером 4,9 МБ и 1100000 вхождений искомого символа:
источник
cat
s, указав имя файла в качестве аргументаwc
иtr
.stdin
, но это может бытьcat
tr -d 'A' < <file> | wc ...
Если все, что вам нужно сделать, это подсчитать количество строк, содержащих вашего персонажа, это сработает:
Тем не менее, он считает несколько вхождений '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
: подсчитывает количество строкПример:
источник