[BASH]Grep con numero massimo di risultati
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
-
- Linux 0.x
- Messaggi: 4
- Iscritto il: ven 1 feb 2008, 19:48
- Slackware: 12.0
- Località: Treviso
- Contatta:
[BASH]Grep con numero massimo di risultati
Salve a tutti!!!
Dovrei trovare una data parola al massimo 5 volte, nei file di testo, il problema è che questa parola è presente in più file, e quindi non posso utilizzare
grep -E {5,} parola_da_cercare *.txt
perchè limita le occorrenze che trova al singolo file, quando a me serve limiti nel totale dei file!
C'è un modo per risolvere questo problema?? Pensavo facendo un programmino con una variabile count......può funzionare???
Grazie!!
Dovrei trovare una data parola al massimo 5 volte, nei file di testo, il problema è che questa parola è presente in più file, e quindi non posso utilizzare
grep -E {5,} parola_da_cercare *.txt
perchè limita le occorrenze che trova al singolo file, quando a me serve limiti nel totale dei file!
C'è un modo per risolvere questo problema?? Pensavo facendo un programmino con una variabile count......può funzionare???
Grazie!!
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH]Grep con numero massimo di risultati
puoi spiegarti meglio? sarà che sono scemo, ma non ho capito bene il tuo problema. Non puoi utilizzare il comando che citi perchè si interrompe solo al primo file che incontra e tu lo vorresti fare per tutti i file txt?
Spina
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH]Grep con numero massimo di risultati
ls *.txt | \kingo ha scritto:Salve a tutti!!!
Dovrei trovare una data parola al massimo 5 volte, nei file di testo, il problema è che questa parola è presente in più file, e quindi non posso utilizzare
grep -E {5,} parola_da_cercare *.txt
perchè limita le occorrenze che trova al singolo file, quando a me serve limiti nel totale dei file!
C'è un modo per risolvere questo problema?? Pensavo facendo un programmino con una variabile count......può funzionare???
Grazie!!
while read file_name
do
grep -H parola_da_cercare ${file_name} | head -n 5
done | less
# -H ti indica il nome del file, se non serve, dimenticalo
Mario Vanoni
-
- Linux 2.x
- Messaggi: 413
- Iscritto il: dom 6 gen 2008, 11:46
- Slackware: 14.1
- Kernel: 3.10.17-smp
- Desktop: Xfce 4.10
Re: [BASH]Grep con numero massimo di risultati
grep -w -m5 "parola" *.txt | less
Comunque rimane sempre l'equivoco su grep. Infatti
grep restituisce le linee di testo in cui una parola è presente.
Per esempio, se ho un file di testo testo.txt con questo contenuto:
hello, hello, hello
hello, hello
hello, hello
hello, hello
hello
il comando:
grep -w -m5 hello testo.txt
restituirà tutte e cinque le linee e non solo le prime due (3 + 2 occorrenze di hello).
Quindi cercare il numero esatto di occorrenze di una parola con grep può essere fallace.
Saluti
Comunque rimane sempre l'equivoco su grep. Infatti
grep restituisce le linee di testo in cui una parola è presente.
Per esempio, se ho un file di testo testo.txt con questo contenuto:
hello, hello, hello
hello, hello
hello, hello
hello, hello
hello
il comando:
grep -w -m5 hello testo.txt
restituirà tutte e cinque le linee e non solo le prime due (3 + 2 occorrenze di hello).
Quindi cercare il numero esatto di occorrenze di una parola con grep può essere fallace.
Saluti
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH]Grep con numero massimo di risultati
Esatto.sixjan ha scritto:grep -w -m5 "parola" *.txt | less
Comunque rimane sempre l'equivoco su grep. Infatti
grep restituisce le linee di testo in cui una parola è presente.
Per esempio, se ho un file di testo testo.txt con questo contenuto:
hello, hello, hello
hello, hello
hello, hello
hello, hello
hello
il comando:
grep -w -m5 hello testo.txt
restituirà tutte e cinque le linee e non solo le prime due (3 + 2 occorrenze di hello).
Quindi cercare il numero esatto di occorrenze di una parola con grep può essere fallace.
Saluti
Grep(1) segna solo le righe con il trovato.
Solvibile con awk(1)?
Mario Vanoni
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH]Grep con numero massimo di risultati
Sbagliato, grep fa mooolto di più.Mario Vanoni ha scritto: Esatto.
Grep(1) segna solo le righe con il trovato.
Sicuramente, ma anche con grep. Ho fatto un copia incolla dello pseudofile presentato da sixjan e ho lanciato:Mario Vanoni ha scritto: Solvibile con awk(1)?
Mario Vanoni
Codice: Seleziona tutto
grep -no "hello" casa.txt | head -n 5
come vedi stampa esattamente 5 occorrenze di "hello", 3 nella prima riga e 2 nella seconda.1:hello
hello
hello
2:hello
hello
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Linux 2.x
- Messaggi: 413
- Iscritto il: dom 6 gen 2008, 11:46
- Slackware: 14.1
- Kernel: 3.10.17-smp
- Desktop: Xfce 4.10
Re: [BASH]Grep con numero massimo di risultati
Quindi... (per rispondere al primo post)
se io dovessi sapere quali file contengono al massimo
5 occorrenze di una parola, userei uno script così:
#!/bin/bash
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
if [[ $QUANTEVOLTE -le 5 ]]; then
echo $file
fi
done
Saluti.
se io dovessi sapere quali file contengono al massimo
5 occorrenze di una parola, userei uno script così:
#!/bin/bash
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
if [[ $QUANTEVOLTE -le 5 ]]; then
echo $file
fi
done
Saluti.
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH]Grep con numero massimo di risultati
Hai ragione con GNU grep,spina ha scritto:Sbagliato, grep fa mooolto di più.Mario Vanoni ha scritto: Esatto.
Grep(1) segna solo le righe con il trovato.
Sicuramente, ma anche con grep. Ho fatto un copia incolla dello pseudofile presentato da sixjan e ho lanciato:Mario Vanoni ha scritto: Solvibile con awk(1)?
Mario Vanonicon il seguente output:Codice: Seleziona tutto
grep -no "hello" casa.txt | head -n 5
come vedi stampa esattamente 5 occorrenze di "hello", 3 nella prima riga e 2 nella seconda.1:hello
hello
hello
2:hello
hello
Spina
ma con i grep derivati da AT&T e Berkeley BSD?
Mario Vanoni
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH]Grep con numero massimo di risultati
Se è per questo neanche con il mio grep, solo che sulla slackware c'è quello GNU, che ci possiamo fare? Speraimo che la prossima volta Pat metta il mio .Mario Vanoni ha scritto: Hai ragione con GNU grep,
ma con i grep derivati da AT&T e Berkeley BSD?
Mario Vanoni
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Linux 0.x
- Messaggi: 4
- Iscritto il: ven 1 feb 2008, 19:48
- Slackware: 12.0
- Località: Treviso
- Contatta:
Re: [BASH]Grep con numero massimo di risultati
sixjan ha scritto:Quindi... (per rispondere al primo post)
se io dovessi sapere quali file contengono al massimo
5 occorrenze di una parola, userei uno script così:
#!/bin/bash
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
if [[ $QUANTEVOLTE -le 5 ]]; then
echo $file
fi
done
Saluti.
porca miseria che veloci!!!
Però non fa quello che volevo io, nel senso che se io ho 6 file ognuno contenute 1 volta la parola che io voglio cercare, il risultato del grep dovrebbero essere solo 5 file, invece me li mostra tutti!
A si, dovete dirmi cosa indicano gli apici rovesciati in QUANTEVOLTE!!!
Grazie nuovamente!
-
- Linux 2.x
- Messaggi: 413
- Iscritto il: dom 6 gen 2008, 11:46
- Slackware: 14.1
- Kernel: 3.10.17-smp
- Desktop: Xfce 4.10
Re: [BASH]Grep con numero massimo di risultati
Scusa. Ma qui c'è un equivoco: tu vuoi sapere in quali file ci siakingo ha scritto:sixjan ha scritto:Quindi... (per rispondere al primo post)
se io dovessi sapere quali file contengono al massimo
5 occorrenze di una parola, userei uno script così:
#!/bin/bash
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
if [[ $QUANTEVOLTE -le 5 ]]; then
echo $file
fi
done
Saluti.
porca miseria che veloci!!!
Però non fa quello che volevo io, nel senso che se io ho 6 file ognuno contenute 1 volta la parola che io voglio cercare, il risultato del grep dovrebbero essere solo 5 file, invece me li mostra tutti!
A si, dovete dirmi cosa indicano gli apici rovesciati in QUANTEVOLTE!!!
Grazie nuovamente!
al massimo 5 volte una data parola, o vuoi sapere i primi 5 file in cui ci sia una determinata parola?
Gli apici rovesciati equivalgono a $(qui_comandi), cioè la variabile QUANTEVOLTE assume il risultato del comando che si trova tra gli apici inversi.
Saluti
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH]Grep con numero massimo di risultati
L'ho detto io che non riuscivo a capire cosa volevi . Dato che ancora non è chiaro, potresti spiegarti meglio???kingo ha scritto:porca miseria che veloci!!!
Però non fa quello che volevo io, nel senso che se io ho 6 file ognuno contenute 1 volta la parola che io voglio cercare, il risultato del grep dovrebbero essere solo 5 file, invece me li mostra tutti!
A si, dovete dirmi cosa indicano gli apici rovesciati in QUANTEVOLTE!!!
Grazie nuovamente!
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Linux 0.x
- Messaggi: 4
- Iscritto il: ven 1 feb 2008, 19:48
- Slackware: 12.0
- Località: Treviso
- Contatta:
Re: [BASH]Grep con numero massimo di risultati
hihi sorry!!!
Allora io dovrei cercare una parola nei file di testo, per esempio, supponiamo voglia cercare il mio nick!
Mi basta però che trovi "kingo" 5 volte al massimo, quindi se kingo compare 5 volte nel primo file che analizza, la ricerca si può fermare e fornirmi il nome del file, altrimenti continua fino a quando non ne trova 5!
Spero di essere stato chiarito, come diceva un comico di zelig
Allora io dovrei cercare una parola nei file di testo, per esempio, supponiamo voglia cercare il mio nick!
Mi basta però che trovi "kingo" 5 volte al massimo, quindi se kingo compare 5 volte nel primo file che analizza, la ricerca si può fermare e fornirmi il nome del file, altrimenti continua fino a quando non ne trova 5!
Spero di essere stato chiarito, come diceva un comico di zelig
-
- Linux 2.x
- Messaggi: 413
- Iscritto il: dom 6 gen 2008, 11:46
- Slackware: 14.1
- Kernel: 3.10.17-smp
- Desktop: Xfce 4.10
Re: [BASH]Grep con numero massimo di risultati
#!/bin/bashkingo ha scritto:hihi sorry!!!
Allora io dovrei cercare una parola nei file di testo, per esempio, supponiamo voglia cercare il mio nick!
Mi basta però che trovi "kingo" 5 volte al massimo, quindi se kingo compare 5 volte nel primo file che analizza, la ricerca si può fermare e fornirmi il nome del file, altrimenti continua fino a quando non ne trova 5!
Spero di essere stato chiarito, come diceva un comico di zelig
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
let TOTALE=$TOTALE+$QUANTEVOLTE
echo $file
if [[ $TOTALE -ge 5 ]]; then break; fi
done
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH]Grep con numero massimo di risultati
Mi hai anticipato, ma visto che l'ho fatta, metto anche la mia soluzione:sixjan ha scritto: #!/bin/bash
for file in *.txt; do
QUANTEVOLTE=`grep -w -o $1 $file | wc -l`
let TOTALE=$TOTALE+$QUANTEVOLTE
echo $file
if [[ $TOTALE -ge 5 ]]; then break; fi
done
Codice: Seleziona tutto
#!/bin/bash
tot=0;
for file in *.txt;
do
count=`grep -o "$1" "$file" | wc -l`;
[[ $count -gt 0 ]] && echo "Nel file, $file -> $count volte";
let tot=$tot+$count;
[[ $tot -ge 5 ]] && break;
done
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama