Techniquement, cela pourrait être considéré comme un sh / bash / etc. question de programmation, donc je pense qu'il a une validité dans les deux endroits.
Rob Hruska
@Rob Hruska: oui, je pense aussi que la programmation bash ... @abrashka: la réponse à votre première et deuxième question est "NON"!
cupakob
Réponses:
178
Que dis-tu de ça:
fgrep -o f <file> | wc -l
Remarque: En plus d'être beaucoup plus facile à mémoriser / dupliquer et personnaliser, c'est environ trois fois (désolé, éditez! A bâclé le premier test) que la réponse de Vereb.
Celui-ci ne fonctionne pas si vous avez besoin de compter \rou de \ncaractères; la tr -cd fréponse fonctionne pour cela.
bjnord
3
Pour compter plusieurs caractères, par exemple a, bet c, utilisez egrep: egrep -o 'a|b|c' <file> | wc -l.
Skippy le Grand Gourou
Aussi, veillez à NE PAS utiliser wc -ccomme dans la trréponse: puisque les grepsorties ligne par ligne, wccompteraient les fins de lignes comme des caractères (d'où le doublement du nombre de caractères).
Skippy le Grand Gourou
@bjnord Ok pour \r, mais pour compter \npourquoi ne pas simplement utiliser wc -l?
Skippy le Grand Gourou
67
même plus vite:
tr -cd f < file | wc -c
Temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurrences du caractère recherché:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Temps de réponse Vereb avec echo, cat, tret bcpour le même fichier:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Le temps de réponse Rob Hruska avec tr, sedet wcpour le même fichier:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Il est temps de répondre Jefromi avec fgrepet wcpour le même fichier:
Réponses:
Que dis-tu de ça:
Remarque: En plus d'être beaucoup plus facile à mémoriser / dupliquer et personnaliser, c'est environ trois fois (désolé, éditez! A bâclé le premier test) que la réponse de Vereb.
la source
\r
ou de\n
caractères; latr -cd f
réponse fonctionne pour cela.a
,b
etc
, utilisezegrep
:egrep -o 'a|b|c' <file> | wc -l
.wc -c
comme dans latr
réponse: puisque lesgrep
sorties ligne par ligne,wc
compteraient les fins de lignes comme des caractères (d'où le doublement du nombre de caractères).\r
, mais pour compter\n
pourquoi ne pas simplement utiliserwc -l
?même plus vite:
Temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurrences du caractère recherché:
Temps de réponse Vereb avec
echo
,cat
,tr
etbc
pour le même fichier:Le temps de réponse Rob Hruska avec
tr
,sed
etwc
pour le même fichier:Il est temps de répondre Jefromi avec
fgrep
etwc
pour le même fichier:la source
a
,b
etc
:tr -cd abc < file | wc -l
.tr -cd abc < file | wc -c
placeoù le A est le caractère
Temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurrences du caractère recherché:
la source
cat
s inutiles , en donnant le nom de fichier comme argument àwc
ettr
.stdin
, mais cela peut être diffusé plutôt quecat
ed:tr -d 'A' < <file> | wc ...
Si tout ce que vous avez à faire est de compter le nombre de lignes contenant votre personnage, cela fonctionnera:
Cependant, il compte plusieurs occurrences de «f» sur la même ligne comme une seule correspondance.
la source
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Remplacement des deux occurrences de «A» par votre caractère et de «fichier» par votre fichier d'entrée.
tr -d '\n' < file
: supprime les nouvelles lignessed 's/A/A\n/g
: ajoute une nouvelle ligne après chaque occurrence de "A"wc -l
: compte le nombre de lignesExemple:
la source