Чи є під Linux / термінал спосіб підрахувати, скільки разів знак char f виникає у простому текстовому файлі?
Чи є під Linux / термінал спосіб підрахувати, скільки разів знак 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
Час для відповіді Jefromi з 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
де А - символ
Час виконання цієї команди з файлом з 4,9 Мб і 1100000 випадків пошуку символу:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
cat
s, надавши ім'я файлу як аргумент wc
та і tr
.
stdin
, але це може бути записано , а не cat
ed: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