[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RiminiLUG-General] esercizio per approfondire la shell - 20110504
- To: riminilug-general@xxxxxxxxxxxx
- Subject: [RiminiLUG-General] esercizio per approfondire la shell - 20110504
- From: Giovanni Pasini <gpasini@xxxxxxxxxxx>
- Date: Wed, 4 May 2011 10:30:36 +0200
- Authentication-results: dtc.neutrino1.xteklabs.com;
- Delivered-to: battarsa@xxxxxxxxxxxx
- Delivered-to: riminilug.it_riminilug_general@xxxxxxxxxxxxxxxxxxxxxxxxx
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed; d=neutrino1.xteklabs.com; h= date:from:to:subject:message-id:reply-to:mime-version :content-type:content-transfer-encoding; s=postfix; bh=/kzAETLpl hqZK0iYICNLw6cy1lM=; b=JkrDNXbfY/Q7wRfXJP6dVDWf+EPF4KSaJMJIUwu9I WSHySXjYRMgW8fDBA0nChWEfLlvdazjZrp+XLEWCq75BLPo/dDN3/HzvDjLKgAzC tULvUEAK6tg17B9th/w2XunJj6u/O9hJggFhTNHBROpqLrC2+SNO23r1nlJ1dPaq hM=
- Reply-to: riminilug-general@xxxxxxxxxxxx
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