Come invertire con sed l’ordine di due parole

Posted on 15 settembre 2008

1


Sulla Wikipedia inglese c’è un elenco (ancorché incompleto) delle categorie che gli autori del Music Genome Project hanno utilizzato per categorizzare e classificare le canzoni che poi è possibile ascoltare su Pandora (a condizione di vivere negli Stati Uniti d’America): http://en.wikipedia.org/wiki/List_of_Music_Genome_Project_attributes.

Copio l’elenco delle varie categorie in un file che chiamo MusicGenome_categories.txt, ma scopro che l’ordinamento mi è poco utile. In inglese l’aggettivo precede il sostantivo, e un esempio delle voci è difatti il seguente:

  • Abstract Lyrics
  • Acousti-Lectric Sonority
  • Acousti-Synthetic Sonority
  • Acoustic Bass Solo

Data la struttura grammaticale utilizzata non sono in grado di vedere a colpo d’occhio tutti i tipi di “lyrics” o di “sonority” che sono stati previsti: a me interessa avere tutti i sostantivi raggruppati, così da distinguerli poi sulla base degli aggettivi specificati. Per intenderci:

  • Lyrics Abstract
  • Sonority Acousti-Lectric
  • Sonority Acousti-Synthetic
  • Solo Bass Acoustic

So che in inglese suona davvero male, ma si tratta di organizzare l’informazione in modo da poter identificare categorie. Dapprima devo quindi “pulire” il file dai vari ” of ” che spostano la label all’inizio.
Poi mi serve identificare l’ultima parola di ogni riga, quella per la quale voglio ri-ordinare l’elenco.

cat MusicGenome_categories.txt | sed -e “s/ $//” -e “s/\(.*\) /\1 >>/g” -e “s/.*\* \(.*\) >>\(.*\)/\2 — \1 \2/g” | sort | uniq > MusicGenome_categories_elaborate.txt

Adesso posso ripulire a mano il file intervenendo sulle differenze di numero (una label scritta sia al plurale che al singolare, intendo dire) e inserendo delle righe vuote per migliorare la leggibilità dei vari gruppi.

Quello che ottengo è ciò che da qualche mese è disponibile alla pagina http://en.wikipedia.org/wiki/List_of_Music_Genome_Project_attributes_by_type.

Advertisements