grep: подсчитать все совпадения для всех шаблонов - PullRequest
0 голосов
/ 20 октября 2011

У меня есть десятки тысяч (фиксированных) шаблонов, для которых я хочу найти совпадения в очень большом файле.Я хотел бы посчитать общее количество попаданий для каждого шаблона.Я не могу найти ничего в документации grep, которая предполагает это возможно.Моя установка выглядела бы примерно так:

gunzip -c bigfile.txt.gz | grep -c -f patterns.txt

Конечно, это подсчитывает строки, которые совпадают что угодно в patterns.txt, когда я хочу, чтобы отдельные подсчетыхитов для каждого шаблона.Возможно ли что-то подобное в командной строке с помощью grep?Или мне придется написать программу?

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

Примерно так:

gunzip -c bigfile.txt.gz | grep -f patterns.txt | sort | uniq -c

Сортировка может быть довольно большой, поскольку она сохранит весь вывод.Быстрый сценарий perl / python / ... с хешем может существенно сократить это.

#!/usr/bin/env ruby
results = {}
while gets
  line = $_.chomp
  results[line] ||= 0
  results[line]+= 1
end
results.each { |k,v| puts ""#{k} #{v}"}
0 голосов
/ 20 октября 2011

Я не знаю, как сделать это для всех шаблонов одновременно, но вы могли бы написать скрипт bash, который читает их по одному и выполняет grep |wc -l для каждого.

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