LINUX.ORG.RU

Посчитать сколько раз встречается словосочетание в директории

 


0

1
while read LINE;do

    LINE=$((+LINE))

done< <(grep -cr 'словосочетание' /путь 2>/dev/null|grep -Po '(?<=:)\d+$')


-- ничего не выводит. Где ошибка?

★★★★★

Последнее исправление: teod0r (всего исправлений: 1)

$ grep -cr 'словосочетание' /путь 2>/dev/null | grep -Po '(?<=:)\d+$' | wc -l


?

Kroz ★★★★★
()
grep -cr 'словосочетание' /путь 2>/dev/null | awk 'BEGIN {FS=":"} {s+=$NF} END {print s}'
anonymous
()

Вообще не понял задачу. Что этот набор черточек и палочек должен делать?

«Посчитать сколько раз встречается словосочетание [«foo»] в [текущей] директории» — это как-то так:

$ grep -r 'foo' | wc -l

Не?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от teod0r

По вопросу уже ответили, а по subshell рекомендую неплохую статью.

Например:

while IFS= read -r line
do
    ((linecount++))
done < <(grep -cr 'словосочетание' /путь 2>/dev/null|grep -Po '(?<=:)\d+$')

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

а по subshell

Так у товарища же не с подоболочкой проблема, а с тем, что у него две разные переменные названы одинаково.

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

Ой, не то запостил...

$ grep -schr fuck linux-4.7.2 | paste -sd+ | bc
29
anonymous
()
Ответ на: комментарий от teod0r

и что мне с ним делать?

grep -rh 'expression' path/  2>/dev/null | wc -l
sin_a ★★★★★
()
Ответ на: комментарий от Zmicier

потому что в одной строке может быть несколько совпадений. мне же нужно посчитать количество совпадений, а не строк, содержащих совпадения

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

обнаружилась странность:
1)

grep -or  0 /SCRIPTS|wc -l
4959

2)
grep -cor 0 /SCRIPTS|awk 'BEGIN {FS=":"} {s+=$NF} END {print s}'
3995

второй вариант считает строчки а не совпадения.

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

а зачем там IFS=? что оно делает?

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

обнаружилась странность

Действительно странность. Если бы во втором случае число было б больше — я б не удивился, это бы значило, что у вас в сценариях завалялись двоичные (нетекстовые) файлы: без ключа -a на каждый двоичник придется только одна строка в выводе: найдено-де и все. А так даже боюсь гадать.

второй вариант считает строчки а не совпадения.

Наоборот.

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

это баг grep?

наоборот

нет. второе число же меньше

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

выводит 6. почему?

Вы меня прямо в тупик ставите. Может быть потому, что 1 + 2 + 3 действительно равно шести?

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

а всё правильно. 6 и должно выводить. думал считать строки должно

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

про <<< $""

Нет, не $"", это другая кавычная форма.

Но здесь очевидно читаемей будет

<< 'EOF'
...
EOF

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