PDA

View Full Version : [C unix] ricerca occorrenze con grep


stella_650
19-06-2008, 15:02
Ciao a tutti...vorrei un aiutino a proposito di un problema di ricerca di tutte le occorrenze di una parola in un testo e d un conteggio delle stesse.

Se utilizzo il comando grep -c occorrenza fileditesto.txt
ottengo solo la somma del numero di linee contenenti la occorrenza e non le occorrenze stesse...come posso fare per ottenere queste?

Nel caso specifico in questo file di testo:

Pattern recognition is the scientific discipline
whose goal is the classification of objects into a number of categories
or classes.
A pattern is a generic objects: images,signals waveform etc.
Pattern recognition an integral part in most machine
intelligence, systems built for decision making.

devo cercare le occorrenzae "is "e contarle.
grep -c is file.txt mi restituisce 4 perchè in 4 righe m vede "is" ma poichè le parole che contengono is sono 5 e nn 4 --> is,discipline,is,is,decision che istruzione devo usare?

marco.r
19-06-2008, 15:13
devi _non_ usare -c, che serve appunto a stampare solo il numero di occorrenze.

stella_650
19-06-2008, 15:20
Senza l'opzione -c ottengo la stampa delle righe che contengono l'occorrenza "is", a me serve il conteggio di queste occorrenze nel file...

eVuGEGA
19-06-2008, 15:33
Senza l'opzione -c ottengo la stampa delle righe che contengono l'occorrenza "is", a me serve il conteggio di queste occorrenze nel file...

Devi mettere il pattern da ricercare tra virgolette:

grep -c "is " file.txt

stella_650
19-06-2008, 15:37
Ottengo lo stesso output..di grep -c is file.txt ...cioè ancora 4

VICIUS
19-06-2008, 16:12
È orrenda come soluzione ma funziona.
sed 's/is/is\
/g' prova.txt | grep -c 'is'

stella_650
19-06-2008, 16:16
sed 's/is/is\
/g' prova.txt | grep -c 'is'

faccio una sostituzione con uno stesso pattern e poi la grep!?
uà...possibile?

stella_650
19-06-2008, 16:19
L'output è sempre 4...

Ziosilvio
19-06-2008, 16:20
sed 's/is/is\
/g' prova.txt | grep -c 'is'

faccio una sostituzione con uno stesso pattern e poi la grep!?
uà...possibile?
No: con lo stesso pattern seguìto da un newline.

@VICIUS: bello non è, però mi sta facendo venir voglia di imparare a usare sed...

stella_650
19-06-2008, 16:28
No: con lo stesso pattern seguìto da un newline.

Ok...ma chi mi spiega perchè? Non l'avrei mai pensato così...
intanto grazie.

Ziosilvio
19-06-2008, 16:52
chi mi spiega perchè?
grep non conta le occorrenze del pattern, ma le righe in cui c'è almeno un'occorrenza del pattern.
Se tu fai una copia "al volo" del file mettendo un newline in fondo a ogni occorrenza del pattern, allora nessuna riga può avere più di un'occorrenza, e il numero che serve a te diventa uguale a quello calcolato da grep sulla copia del file.

stella_650
19-06-2008, 17:04
Grazie mille:)

marco.r
19-06-2008, 23:32
Senza l'opzione -c ottengo la stampa delle righe che contengono l'occorrenza "is", a me serve il conteggio di queste occorrenze nel file...

ah sorry, avevo letto male la richiesta. Mille scuse