fe ha scritto:
se mi spieghi brevemente come hai fatto a farlo... mah
In breve, senza cioè farti un corso accelerato di comandi Unix e non in maniera troppo tecnica, ti descrivo cosa fanno i vari comandi.
Il primo non fa granché: semplicemente legge il file libro.txt e lo scrive in output. Questo output viene mandato in input al secondo comando tramite il simbolo cosidetto di pipe
|, creando in pratica un filtro.
Il secondo comando, che è , legge questo input e lo modifica seguendo le istruzioni passategli come argomento, nel nostro caso l'istruzione è
s,[[:punct:]], ,g e significa: sostituisci tutti i caratteri di punteggiatura e altri tipo &, <, >, #, etc. che trovi con uno spazio. L'output prodotto da
sed diventa l'input del comando successivo tramite il solito simbolo di pipe
|.
Il terzo comando () trasforma ogni singolo spazio in input in un newline scrivendo il risultato in output e lasciando inalterati gli altri caratteri.
A questo punto il testo iniziale è stato spezzato nelle singole parole e non ci resta che eliminare i newline, i caratteri di tabulazione, etc, e lo facciamo mandando l'output di
tr in input tramite la solita pipe
| al comando .
Quest'ultimo filtra soltanto quelle righe (del suo input) che corrispondono all'espressione regolare
^[[:alnum:]]+.
Questa espressione significa appunto: una riga che inizi con almeno un carattere alfanumerico.
A questo punto, l'output di
egrep viene raccolto dal comando il quale ordina alfabeticamente le righe e le manda in input all'ultimo comando nella pipe.
E` proprio che fa la magia di eliminare le ripetizioni di ogni parola e, grazie all'opzione
-c, aggiunge al suo output anche il numero di occorrenze con cui ogni singola parola compariva in input.
L'output di
uniq viene infine scritto (redirezionato) tramite il simbolo
> nel file di nome
dizionario.txt
Come detto però il risultato finale potrebbe non essere quello voluto: ci potrebbero essere ad esempio parole sia maiuscolo che minuscole, etc...