Voglio trovare le parole più frequenti in un file di testo, usando un elenco di parole non significative. Ho già questo codice:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head  -10 > test.txt
 da un vecchio post
 ma il mio file contiene qualcosa del genere:
240 
 21 ipsum
 20 Lorem
 11 Textes
 9 Blindtexte
 7 Text
 5 F
 5 Blindtext
 4 Texte
 4 Buchstaben
Il primo è solo uno spazio e nel testo sono segni di punteggiatura (come punti), ma non voglio questo, quindi cosa devo aggiungere?
Risposta accettata:
Considera questo file di prova:
$ cat text.txt
this file has "many" words, some
with punctuation.  some repeat,
many do not.
Per ottenere un conteggio delle parole:
$ 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
Come funziona
-  grep -oE '[[:alpha:]]+' text.txtQuesto restituisce tutte le parole, meno eventuali spazi o segni di punteggiatura, con una parola per riga. 
-  sortQuesto ordina le parole in ordine alfabetico. 
-  uniq -cQuesto conta il numero di volte in cui si verifica ogni parola. (Per uniqper funzionare, il suo input deve essere ordinato.)
-  sort -nrQuesto ordina l'output numericamente in modo che la parola più frequente sia in cima. 
Gestione di casi misti
Considera questo file di test con casi misti:
$ cat Text.txt
This file has "many" words, some
with punctuation.  Some repeat,
many do not.
 Se vogliamo contare some e Some come lo stesso:
$ 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
 Qui, abbiamo aggiunto il -f opzione per sort in modo da ignorare maiuscole e minuscole e -i opzione per uniq in modo da ignorare anche le maiuscole.
Escluse le stop word
Supponiamo di voler escludere dal conteggio queste stop word:
$ cat stopwords 
with
not
has
do
 Quindi, aggiungiamo grep -v per eliminare queste parole:
$ 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