Contare le occorrenze di un carattere in un file di testo semplice
Domanda
Esiste un modo per contare su linux / terminal, quante volte il carattere f si presenta in un file di testo normale?
Soluzione
Che ne dici di questo:
fgrep -o f <file> | wc -l
Nota: oltre a essere molto più facile da ricordare / duplicare e personalizzare, questo è circa tre volte (scusa, modifica! fallito il primo test) più veloce della risposta di Vereb.
Altri suggerimenti
ancora più veloce:
tr -cd f < file | wc -c
Tempo per questo comando con un file con 4.9 MB e 1100000 occorrenze del carattere cercato:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Tempo per la risposta di Vereb con echo
, cat
, tr
e bc
per lo stesso file:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Tempo per la risposta di Rob Hruska con sed
, wc
e fgrep
per lo stesso file:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Tempo di risposta di Jefromi con <=> e <=> per lo stesso file:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
dove A è il personaggio
Tempo per questo comando con un file con 4.9 MB e 1100000 occorrenze del carattere cercato:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Se tutto ciò che devi fare è contare il numero di righe che contengono il tuo personaggio, questo funzionerà:
grep -c 'f' myfile
Tuttavia, conta più occorrenze di 'f' sulla stessa riga di una singola corrispondenza.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Sostituzione delle due occorrenze di " A " con il tuo personaggio e " file " con il tuo file di input.
-
tr -d '\n' < file
: rimuove le nuove righe -
sed 's/A/A\n/g
: aggiunge una nuova riga dopo ogni occorrenza di " A " -
wc -l
: conta il numero di righe
Esempio:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9