J'avais une commande qui fonctionnerait à travers un fichier texte, compterait toutes les occurrences des mots et l'imprimerait comme ceci:
user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5: internet
3: sh
1: GNU/Linux
Il ne recherche donc pas ligne par ligne, mais mot par mot, et il le fait pour tous les mots, pas seulement pour 1 mot. Je l'avais trouvé quelque part sur les internets il y a longtemps, mais je ne peux pas le trouver ou m'en souvenir ..
tr -s
pour gérer plusieurs espaces, en particulier lorsque vous rencontrez une indentation.-g
(--general-numeric-sort
) l'option desort
peut être préférable dans certains cas. Par exemplesort -n
, gardera10\n1 4
tel quel , en traitant1 4
comme14
, tandis quesort -g
le traitera correctement comme1 4\n10
.echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnr
Notez que je suis un débutant, donc je peux me tromper, n'hésitez pas à le conseiller.Pour diviser l'entrée en mots, remplacez tout caractère que vous jugez être un séparateur de mots par une nouvelle ligne.
la source
Ne pas utiliser grep et awk mais cela semble faire ce que vous voulez:
la source
set -f
) et traite la ponctuation comme faisant partie des mots (ce qui peut être corrigé maladroitement en ajoutant des caractères de ponctuation àIFS
- bonne chance en essayant de prendre en charge les jeux de caractères non ASCII). Ce ne sera pas bon avec des fichiers d'entrée très volumineux, car il stocke tout le fichier en mémoire (sort
c'est plus intelligent).Je crois que tu veux quelque chose comme ça?
bien sûr, vous pouvez faire de même avec
awk
:)la source
Utilisation de la
awk/sort/uniq
solution:la source
tri croissant après avoir divisé le fichier en mots.
Le grep simple trouvera
fish
dansfisheye
, vous devez donc améliorer la commande grep pour empêcher les correspondances partielles.Prend environ 3 secondes pour un fichier texte de 25k sur une machine de tous les temps, disque dur classique (IDE).
Pour les fichiers plus gros ou les opérations souvent effectuées, une approche de carte de hachage serait préférable, mais pour un travail rarement exécuté ou pour des fichiers plus petits uniquement, cela pourrait être suffisant.
la source