Domanda

Esiste un modo per contare su linux / terminal, quante volte il carattere f si presenta in un file di testo normale?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top