[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RiminiLUG-General] esercizio per approfondire la shell - 20110504



Ciao,
vi propongo un altro esercizio per approfondire la shell (dash).

Problema:
- ho un file di testo con dentro una serie di nomi di località
- alcune località sono formate da due o più parole separate da uno spazio
- voglio passare ad un comando (per semplificare uso il solito echo) il nome della località per intero seguito da una frase

Ecco un file di esempio:
$ echo -en 'Spadarolo\nRimini\nSan Savino\nSan Martino dei Molini\n' > foo_loc.txt
$ cat foo_loc.txt
Spadarolo
Rimini
San Savino
San Martino dei Molini
$ for loc in `cat foo_loc.txt`;do echo $loc è una località stupenda; done
Spadarolo è una località stupenda
Rimini è una località stupenda
San è una località stupenda
Savino è una località stupenda
San è una località stupenda
Martino è una località stupenda
dei è una località stupenda
Molini è una località stupenda

gli spazi vengono presi come separatori e quindi non funziona come voglio.
In questo caso mi sembra che non si possa evitare l'uso della variabile IFS, oppure no?
Forse usando un altro comando e non cat?

Impostando IFS - esempio funzionante:
$ IFS=$(echo -en "\n\b") #notare che non basta \n, provate con solo IFS=$(echo -en "\n")
$ cat foo_loc.txt #invariato
$ for loc in `cat foo_loc.txt`;do echo $loc è una località stupenda; done
Spadarolo è una località stupenda
Rimini è una località stupenda
San Savino è una località stupenda
San Martino dei Molini è una località stupenda
$ unset IFS

La mia domanda è, si può fare a meno di modificare IFS qui? Io credo di no, ma le soluzioni sono sempre varie con la bash...! e mi piacerebbe sapere se ne avete di diverse.


Ciao, e grazie,
Giovanni