LINUX.ORG.RU

Подсчитать количество файлов и количество вхождений строки в них

 


0

2

Добрый день. Подскажите, пожалуйста. Нужно рекурсивно обойти все директории от текущей и найти в файлах с определенным расширением определенный кусок текста, вывести кол-во вхождений и кол-во файлов, в которых эти вхождения есть.

find ./ -name "*.ext" -exec grep -c 'string' {} \;
alozovskoy ★★★★★
()

grep -r $path $text | wc -l Про количество файлов сам сообрази.

Deleted
()

решение в 2 строчки тривиально, подождём отцов шелла с мощным однострочником

zolden ★★★★★
()
find -name '*.ext' -exec bash -c 'let matches=0 files=0; for f; do m=$(grep -c -- your_string "$f") && (( matches += m, files++ )); done; echo "$matches match(es) in $files file(s)."' _ {} +
anonymous
()
Ответ на: не баш, но на безрыбье деваться некуда от zolden
find ./ -name "*.ext" -type f -print | tee list | xargs cat | grep -c 'string' | tee num | xargs wc -l list 2>/dev/null

на выхлопе имеем количиство файлов, в файле num - количиство вхождений. грязно, ну да и хрен с ним.

f1st
()
find ./ -name "*.ext" -exec grep -H -c 'string' {} +;

Вывод в виде:

/path/file1:4
/path/file2:0
/path/file3:1
anonymous
()
Ответ на: комментарий от anonymous

Ах ты читер, а количество файлов Пушкин за тебя считать будет?

Довольно этого детского сада, пора угореть по хардкору.
А что за хардкор без олдскула: emulek, ananas, sT331h0rs3, nbw, Diff

Играем в гольф, победитель забирает всё

zolden ★★★★★
()
Ответ на: комментарий от zolden

а количество файлов Пушкин за тебя считать будет?

Элементарщина же

 ... | awk -F':' '{t+=2}; $2 > 0 {i++}; END {print "Files: "$i; print "Total entries: "$t}'
anonymous
()
Ответ на: комментарий от sT331h0rs3

Лол, я и не думал, что ты настолько уныл!
Но скрывать некомпетентность под такими отмазками это вообще фу таким быть

zolden ★★★★★
()
Ответ на: комментарий от zolden

А я знал, что ты такой петросян. Специально сюда зашёл ради твоих смешных коментариев.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от t184256

Да не, пусть останется! Будет где-то на заднем плане сам себе радоваться, не мешает.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от anonymous
perl -nE' code ' `find .`

P.S. Если имена файлов повторяются:

perl -nE' $i++ while /$PATTERN/g; $j++ if /$PATTERN/ }{ say "$i,$j" ' files

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.