Посчитать количество вхождений слова в файлах - РЕШЕНО
Модератор: Bizdelnick
-
Skala
- Сообщения: 241
- ОС: Gentoo
Посчитать количество вхождений слова в файлах - РЕШЕНО
Когда-то видел на ЛОРе: А вот сколько раз употреблено такое-то слово в исходниках ядра, а вот кто оставлял свои копирайты...
В связи с этим вопрос: Как действительно посчитать, сколько раз какое-то слово встречалось в файлах? - Смотрел man find, но точ-то не уверен, что в этом направлении ищу.
В связи с этим вопрос: Как действительно посчитать, сколько раз какое-то слово встречалось в файлах? - Смотрел man find, но точ-то не уверен, что в этом направлении ищу.
Спасибо за внимание.
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Skala, используйте grep с параметром -c (--count).
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
Skala
- Сообщения: 241
- ОС: Gentoo
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
find же ищет по имени. А по содержимому там как?
Спасибо за внимание.
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
ну например
find . | xargs grep "искомое" | wc -w
если, конечно, у вас нет всяких пробелов в именах файлов...
upd. хотя ведь можно и с одним пайпом -
grep "искомое" * | wc -w
find . | xargs grep "искомое" | wc -w
если, конечно, у вас нет всяких пробелов в именах файлов...
upd. хотя ведь можно и с одним пайпом -
grep "искомое" * | wc -w
but in the darkness, behind your smile, you scream... © Dio
-
edoc_modnar
- Бывший модератор
- Сообщения: 1638
- Статус: Форум больше не посещаю
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Если нужно посчитать именно число вхождений каждого слова, то это не подходит. Кроме того, варианты сильно отличаются: второй вариант не будет искать в файлах, находящихся в поддиректории.
Но не в этом дело: по умолчанию grep выводит соответствие регекспу вместе с контекстом, то есть со всей строкой. При этом на другом конце пайпа считается число слов (wc -w). Правильно будет выводить только соответствующие регекспу слова (grep -o), а тут уже считать строки или слова - без разницы (потому что все слова будут выводиться на отдельной строке). Кроме того, изврат с xargs совсем не нужен:
Код: Выделить всё
find . -name "*.txt" -exec grep -o "fuck" '{}' \; | wc -lSkala, а чтобы понять и разобраться:
Код: Выделить всё
man find
man grep
man wcSo long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
-
Skala
- Сообщения: 241
- ОС: Gentoo
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Большое спасибо за оба варианта (к сожалению, сейчас я не дома, когда приду домой- обязательно посмотрю)!random_code писал(а): ↑04.07.2007 15:19Код: Выделить всё
find . -name "*.txt" -exec grep -o "fuck" '{}' \; | wc -l
Skala, а чтобы понять и разобраться:
Код: Выделить всё
man find man grep man wc
Спасибо за внимание.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Ну, положим, что больший изврат -- xargs или find -exec -- можно ещё поспорить
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
edoc_modnar
- Бывший модератор
- Сообщения: 1638
- Статус: Форум больше не посещаю
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
По-моему, больший изврат там, где нужно больше пайпов (:
So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Если чо, у grep-а есть опция "-c" 
grep -rc linus /usr/src/linux
grep -rc linus /usr/src/linux
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Это по-твоему.
Уже обсуждалось выше, это не то, что нужно:
(man grep) писал(а):-c, --count
Suppress normal output; instead print a count of matching lines for each input file.
Оп-па.. Интересно. Потестировал на предмет скорости (дабы не оставаться голословным, ага
Код: Выделить всё
$ time (find . -exec grep -o "op" '{}' \; | wc -l)
301043
real 2m37.804s
user 0m36.318s
sys 0m40.911s
$ time (find . -print0 | xargs -0 grep -o "op" | wc -l)
319473
real 1m37.292s
user 0m13.297s
sys 0m8.217s¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
edoc_modnar
- Бывший модератор
- Сообщения: 1638
- Статус: Форум больше не посещаю
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Ну ничего необычного. Чем больше входных файлов, тем более заметен отрыв в скорости. Потому что в моем случае создается новый процесс grep для каждого файла. С xargs все зависит от ограничений ОС на число аргументов и их длинну.
So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
А второй тест проводился сразу после первого? Тогда большая часть файлов находилась в кэше.
-
edoc_modnar
- Бывший модератор
- Сообщения: 1638
- Статус: Форум больше не посещаю
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Я тоже так думал, пока не провел тесты на своей системе:
Так что признаю, что я - осел, а xargs в данном случае - не изврат (:
Все-таки создание процесса - дорогая штука (как и вызов функции). Керниган и Ритчи нас надули. Два раза. И почти в одинаковых местах (:
Код: Выделить всё
rc@random ~ $ cd /usr/src/linux
rc@random linux $ time (find . -print0 | xargs -0 grep -o "op" | wc -l)
301451
real 0m48.585s
user 0m5.584s
sys 0m3.936s
rc@random linux $ time (find . -exec grep -o "op" '{}' \; | wc -l)
301451
real 4m55.437s
user 3m26.645s
sys 0m40.875sТак что признаю, что я - осел, а xargs в данном случае - не изврат (:
Все-таки создание процесса - дорогая штука (как и вызов функции). Керниган и Ритчи нас надули. Два раза. И почти в одинаковых местах (:
So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Посчитать количество вхождений слова в файлах - РЕШЕНО
Мне всё-таки другое интересно: почему разный результат мог получиться...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж