2017-02-07 5 views
1

Я хочу проверить количество вхождений символа '[', рекурсивно во все файлы каталога, имеющего такое же расширение, например. * .c. Я работаю с SO Solaris в Unix.Подсчет количества вхождений в нескольких файлах

Я пробовал некоторые решения, которые даются в других постах, и только один, который работает это один, так как с этой ОС я не могу использовать команду grep -o:

sed 's/[^x]//g' filename | tr -d '012' | wc -c 

где х является возникновение Я хочу считать. Это работает, но это не рекурсивно, есть ли способ сделать его рекурсивным?

+0

Вы можете сделать его рекурсивным для определенного каталога, заменив 'filename' на' * '(для текущего каталога) или'/dir/* 'для другого каталога или даже' /dir1/*.txt/dir2/*. txt' для сканирования двух каталогов. Если вы хотите искать recursivelly для всех каталогов, то использование 'find' является правильным способом. –

+0

Спасибо, Джордж, ты совершенно прав, и мне нужен последний вариант, поэтому я использовал найти, как Гриша предложил мне делать и работать, спасибо! – Vpdj

ответ

1

Вы можете получить рекурсивный список от find и выполнить команды с его аргументом -exec.

Я хотел бы предложить, как:

find . -name '*.c' -exec cat {} \; | tr -c -d ']' | wc -c 

-c аргумента tr означает использовать противоположную строку поставляемой - то есть в данном случае совпадает все но].

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

+0

Это решение полностью работает, спасибо вам большое! – Vpdj

0

Надеюсь, у вас установлен nawk. Тогда вы можете просто:

nawk '{a+=gsub(/\]/,"x")}END{print a}' /path/* 
+0

nawk не очень хорошо работает с моей ОС, но спасибо вам за ответ! – Vpdj

0

Вы можете написать код фрагмента. Я предлагаю вам выполнить следующее:

awk '{for (i=1;i<=NF;i++) if ($i=="[") n++} END{print n}' *.c 

Это будет искать «[» во всех файлах в данном каталоге и напечатать количество вхождений.

+0

Я пробовал это решение, но, похоже, он печатает количество файлов, в которых происходит это событие, и я хочу знать, сколько раз символ появляется во всех файлах. – Vpdj

+0

Вы уверены? Потому что я использую тот же код, и он показал мне ... 10, даже если каталог содержит только 5 файлов. –

+0

Да, я использовал этот код с одним файлом, который имел 6 вхождений символа ']', и он показал мне 1. Затем я создал другой файл с таким же количеством вхождений и показал мне 2, поэтому мой вывод заключался в том, что он учитывал только файлы в котором персонаж появился хотя бы один раз, но я не знаю, почему у нас разные решения, может быть, я делаю что-то неправильно, спасибо за ваш ответ! – Vpdj

Смежные вопросы