[PLUTO-help] Ora èbash :-(

Stefano Callegari stefano a omniluxlighting.it
Mar 6 Maggio 2003 23:35:45 CEST


Il 06May 18:31, new scrisse:
> On Mon, 5 May 2003 18:25:40 +0200
> Stefano Callegari <stefano a omniluxlighting.it> wrote:
> 
> 
> > > 
> > > for i in `cat $TEMP_TESTO | grep -e "\ \+§§" | awk -F' §§ ' {'print $2'} | awk -F' ' {'print $1'}`
> > > do
> > > vattelapesca
> > > done
> > > 
> > > 
> > > dovrebbe funzionare!
> > 
> > Non credo.
> > 
> > Il fatto è che cat ... | grep ... | awk ... | awk ... mi restituisce
> > più righe/valori mentre io devo verificarne uno alla volta.
> 
> Non so quale sia il contenuto del file $TEMP_TESTO e di conseguenza
[cut]
> farebbe ciò che intendi). Per cui in questo caso il for da me
> indicato fa la stessa cosa del while senza però usare pipe...quindi
> non dovresti avere lo stesso problema delle variabili che vengono
> perse.

Per meglio capire dovrei postare tutto lo script. Vediamo se riesco a
spiegarmi senza.

Ecco il testo d'esempio su cui ho fatto i test.

[inizio]
§§ invito alla festa.

Mi piacerebbe invitar§§ alla festa.

§§ attendo oggi alle 20. §§ chiamo per conferma.

Sarà mia cura ricordar§§ l'appuntamento. Allora, §§ contatterò. 
[fine]

In ordine:

1) grep isola le linee che contengono ' §§';
2) il primo awk divide ogni riga usando '§§' come separatore e prende
il secondo campo;
3) il secondo awk divide ulteriormente prendendo la prima parola.

In pratica, usando l'esempio, il tutto mi restituisce le parole
'chiamo' della 3^ riga e 'contatterò' della 4^ riga.

Le due parole le invio ad una funzione che confrontandole in un case
decide se usare 'La' (.. La chiamo ..) o 'Le' (p.e. "..Le rammento..").

A quel punto tramite sed sostituisco tutte le occorrenze '§§ $VERIFICA'
con 'La/Le $VERIFICA'.

Quindi ho la necessità di operare su un valore alla volta.

Questo viene fatto da altri 2 cicli: uno con §§ all'inizio ("La
invito..." e "La attendo..."); l'altro con §§ al termine di una parola
("..invitarLa.." e "..ricordarLe.."). Logicamente con appropriati
comandi cat|grep|awk e sed.

> > E poi non capisco, al fine dei 'parent' e 'child' che differenza ci sia
> > tra un ciclo for e uno while :-)
> > 
> nel tuo caso fa differenza...tu usi una pipe... | while read
> variabile... è ovvio che le variabili che usi nel ciclo non siano
> visibili dal processo "padre". Serebbero invece simili i cicli se
> invece di usere la pipe usassi la ridirezione tramite < per farti
> capire faccio un esempio:
> 
> questo script banale mostre come funzionano tre tipi di cicli.
> ######################################
> file=file.txt
> 
> ###################################
> # il file file.txt contiene:
> #	1
> #	2
> #	3
> #	4
> #	5
> #	6
> #
> ####################################
> a=0
> c=0
> f=0
> 
> for i in 1 2 3 4 5 6

Cioè "in 'il contenuto el file'"?

[cut]
> 
> come vedi nei primi due cicli la variabile che viene incrementata ad
> ogni 'run' viene mantenuta (valore finale 6), nel terzo no. Mi
> stupirei se non fosse così.

Io mi stupisco del perchè è così :-). In effetti il terzo ciclo è
quello che ottengo, però non mi sembra che gli esempi siano applicabili
al mio caso. Comunque come ho 2 minuti di tempo ci provo.

Ciao
-- 
Stefano Callegari <stefano a omniluxlighting.it>
Omnilux Srl
Via Frassanedo, 2 - I 35020 Villatora di Saonara (PD)
+39 049 8792281


More information about the pluto-help mailing list