Je recherche une commande pour compter le nombre de tous les mots d'un fichier. Par exemple, si un fichier est comme ça,
today is a
good day
alors il devrait s'imprimer 5
, car il y a des 5
mots.
text-processing
wc
Richard
la source
la source
wc -w $FILE
?Réponses:
La commande
wc
aka. le nombre de mots peut le faire:exemple
la source
wc -w
n'ont pas la même définition que pour GNUgrep -w
. Pourwc
un mot est une séquence d'un ou plusieurs caractères non-espace ([:space:]
classe de caractères dans l'environnement local actuel). Par exemple,foo,bar
etfoo bar
(avec un espace insécable) sont chacun un mot.Je suis venu avec cela pour JUSTE le nombre:
J'aime aussi l'
wc -w < [file]
approcheEnfin, pour stocker uniquement le nombre de mots dans une variable, vous pouvez utiliser ce qui suit:
Cela vous permet de sauter le nom de fichier avec élégance.
la source
wc -w < "$file"
pour JUSTE le nombre.La meilleure solution est d'utiliser Perl:
@Bernhard
Vous pouvez vérifier le code source de la
wc
commande de coreutils, je teste dans ma machine, avec le fichiersubst.c
en bash 4.2 source.Et
Plus le fichier est gros, plus Perl est efficace par rapport à
wc
.la source
wc
pris ~ 14sec tandis que Perl a pris ~ 5sec!split
sur/\s+/
est comme unesplit(' ')
exception que les espaces blancs menant produit un premier champ nul. Cette différence vous donnera un mot supplémentaire (le premier champ nul, c'est-à-dire) par lien de ligne . Utilisez donc le(split(" ", $_))
contraire pour un fichier créé comme ceci:echo -e "unix\n linux" > testfile
votre one-liner rapporte 3 mots.wc
sera beaucoup plus rapide, tout comme avecPERLIO=:utf8
,perl
sera beaucoup plus lent.Utilisons AWK!
Ceci répertorie la fréquence de chaque mot apparaissant dans le fichier fourni. Je sais que ce n'est pas ce que tu as demandé, mais c'est mieux! Si vous voulez voir les occurrences de votre mot, vous pouvez simplement le faire:
J'ai même ajouté cette fonction à mes fichiers .dot
Source: Rubis AWK
la source
Le
wc
programme compte des «mots», mais ce ne sont pas par exemple les «mots» que beaucoup de gens verraient lorsqu'ils examineraient un dossier. Levi
programme utilise par exemple une mesure différente de "mots", les délimitant en fonction de leurs classes de caractères, toutwc
en comptant simplement les choses séparées par des espaces . Les deux mesures peuvent être radicalement différentes. Considérez cet exemple:vi
voit trois mots ( premier et deuxième ainsi que la virgule qui les sépare), tandis quewc
voit un (il n'y a pas d'espace sur cette ligne). Il existe de nombreuses façons de compter les mots, certaines sont moins utiles que d'autres.Alors que Perl serait mieux adapté à l'écriture d'un compteur pour les mots de style vi, voici un exemple rapide utilisant
sed
,tr
etwc
(modérément portable en utilisant des retours chariot littéraux^M
):Comparaison des dénombrements:
wc
donne 28.Pour référence, POSIX vi dit:
la source