Esiste un modo per contare su Linux / Terminal, quante volte il carattere f si presenta in un file di testo semplice?
Esiste un modo per contare su Linux / Terminal, quante volte il carattere f si presenta in un file di testo semplice?
Risposte:
Cosa ne pensi di questo:
fgrep -o f <file> | wc -l
Nota: oltre a essere molto più facile da ricordare / duplicare e personalizzare, questo è circa tre volte (scusate, modificate! Il primo test è fallito) più velocemente della risposta di Vereb.
\ro \ncaratteri; la tr -cd frisposta funziona per quello.
a, be c, usare egrep: egrep -o 'a|b|c' <file> | wc -l.
wc -ccome nella trrisposta: poiché le grepuscite riga per riga, wccontano la fine delle righe come caratteri (raddoppiando quindi il numero di caratteri).
\r, ma per contare \nperché non usare semplicemente wc -l?
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 Vereb con echo, cat, tre bcper lo stesso file:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Tempo per Rob Hruska risposta con tr, sede wcper lo stesso file:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Tempo di risposta di Jefromi con fgrep e wcper lo stesso file:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a, be c: tr -cd abc < file | wc -l.
tr -cd abc < file | wc -cinvece
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
dove la 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
cat, fornendo il nome del file come argomento a wce tr.
stdin, ma può essere reindirizzato anziché cated:tr -d 'A' < <file> | wc ...
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
Sostituendo le due occorrenze di "A" con il tuo personaggio e "file" con il tuo file di input.
tr -d '\n' < file: rimuove le nuove righesed 's/A/A\n/g: aggiunge una nuova riga dopo ogni occorrenza di "A"wc -l: conta il numero di righeEsempio:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9