[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