Подсчет количества вхождений символа в нескольких файлах с помощью оболочки Unix - PullRequest
1 голос
/ 31 марта 2012

Я бы хотел помочь моей девушке - ей нужно определенное количество определенных символов примерно в 200 файлах (на файл).

Я уже нашел Как я могу использовать оболочку UNIX для подсчета количества раз, когда буква появляется в текстовом файле? , но это показывает только полное число, а не количество вхожденийза файл.в основном, что я хочу, это следующее:

$ ls 
test1   test2
$ cat test1
ddddnnnn
ddnnddnnnn
$ cat test2
ddnnddnnnn
$ grep -o 'n' * | wc -w
16
$ <insert command here>
test1 10
test2 6
$

или что-то подобное в отношении вывода.Так как это будет на ее университетской машине, я не могу ничего написать на Perl или около того, только оболочка разрешена.Мои знания о оболочке немного ржавые, поэтому я не могу найти лучшего решения - может быть, вы могли бы помочь.

Ответы [ 3 ]

2 голосов
/ 31 марта 2012
grep -Ho n * | uniq -c

производит

 10 test1:n
  6 test2:n

Если вы хотите именно ваш вывод:

grep -Ho n * | uniq -c | while read count file; do echo "${file%:n} $count"; done
0 голосов
/ 01 апреля 2012

Ответ Глена гораздо лучше для разновидностей UNIX, которые его поддерживают.Это будет работать на UNIX, который утверждает, что он POSIX-совместимый.Это предназначено для бедных людей, для которых другой ответ не летает.POSIX grep ничего не говорит о grep -H -o См .: http://pubs.opengroup.org/onlinepubs/009604499/utilities/grep.html

Получите список файлов, которые вы хотите, назвать его list.txtЯ выбрал символ ^ == смещение 6 без причины

while read fname
do
  cnt=`tr -dc '^' < $fname | wc -c`
  echo "$fname: $cnt"
done < list.txt
0 голосов
/ 31 марта 2012

Это не совсем элегантно, но самое очевидное решение:

letter='n'
for file in *; do
    count=`grep -o $letter "$file" | wc -w`
    echo "$file contains $letter $count times"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...