GNU/Linux >> Tutoriels Linux >  >> Linux

Trouver N mots les plus fréquents dans un fichier avec une liste de mots vides à partir de la ligne de commande ?

Je veux trouver les mots les plus fréquents dans un fichier texte, en utilisant une liste de mots vides. J'ai déjà ce code :

tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head  -10 > test.txt

d'un ancien message
mais mon fichier contient quelque chose comme ceci :

240 
 21 ipsum
 20 Lorem
 11 Textes
 9 Blindtexte
 7 Text
 5 F
 5 Blindtext
 4 Texte
 4 Buchstaben

Le premier est juste un espace et dans le texte ce sont des signes de ponctuation (comme des points), mais je ne veux pas cela, alors que dois-je ajouter ?

Réponse acceptée :

Considérez ce fichier de test :

$ cat text.txt
this file has "many" words, some
with punctuation.  some repeat,
many do not.

Pour obtenir un nombre de mots :

$ grep -oE '[[:alpha:]]+' text.txt | sort | uniq -c | sort -nr
      2 some
      2 many
      1 words
      1 with
      1 this
      1 repeat
      1 punctuation
      1 not
      1 has
      1 file
      1 do

Comment ça marche

  • grep -oE '[[:alpha:]]+' text.txt

    Cela renvoie tous les mots, moins les espaces ou la ponctuation, avec un mot par ligne.

  • sort

    Cela trie les mots par ordre alphabétique.

  • uniq -c

    Cela compte le nombre de fois que chaque mot apparaît. (Pour uniq pour fonctionner, son entrée doit être triée.)

  • sort -nr

    Cela trie la sortie numériquement afin que le mot le plus fréquent soit en haut.

Traitement des cas mixtes

Considérez ce fichier de test à casse mixte :

$ cat Text.txt
This file has "many" words, some
with punctuation.  Some repeat,
many do not.

Si nous voulons compter some et Some identique :

$ grep -oE '[[:alpha:]]+' Text.txt | sort -f | uniq -ic | sort -nr
      2 some
      2 many
      1 words
      1 with
      1 This
      1 repeat
      1 punctuation
      1 not
      1 has
      1 file
      1 do

Ici, nous avons ajouté le -f option pour sort pour qu'il ignore la casse et le -i option pour uniq de sorte qu'il ignorerait également la casse.

Excluant les mots vides

Supposons que nous voulions exclure ces mots vides du décompte :

$ cat stopwords 
with
not
has
do

Donc, nous ajoutons grep -v pour éliminer ces mots :

$ grep -oE '[[:alpha:]]+' Text.txt | grep -vwFf stopwords | sort -f | uniq -ic | sort -nr
      2 some
      2 many
      1 words
      1 This
      1 repeat
      1 punctuation
      1 file

Linux
  1. Copiez et collez sur la ligne de commande Linux avec xclip

  2. Utilisation de Google Drive à partir de la ligne de commande Linux

  3. Trouver N mots les plus fréquents dans un fichier ?

  4. Comment trouver le mot le plus fréquent dans un fichier .csv, en ignorant les doublons sur chaque ligne ?

  5. Comment trouver le processus avec un maximum de descripteurs de fichiers ?

Comment rechercher des fichiers à partir de la ligne de commande Linux

Comment envoyer un e-mail avec une pièce jointe à partir de la ligne de commande

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

quelle est la commande la plus fiable pour trouver la taille réelle d'un fichier linux

Impression depuis la ligne de commande avec LibreOffice, commandes lpr ?

Comment puis-je ouvrir un fichier avec des numéros de ligne affichés à partir de la ligne de commande dans 'vi' ?