Newsgroup: it.comp.os.linux.iniziare
Titolo: Bash.  riportare puntatore alla riga precendete

 
Stavo provando a fare uno script bash un pò particolare
per il fatto che lo script deve leggere File1 riga per riga
quando trova un pattern deve entrare in un altro ciclo
if  read File1 fi, per leggere la prossima riga  e se  trova
un secondo pattern fare qualche cosa, ma anche se non
trova nulla esce da ciclo if  e si deve riportare il "puntatore"
del File1 alla riga precedente prima del ciclo principale
while  read  che sta a monte.
 
Mi sapete dire se sia possibile fare una cosa del genere con
il linguaggio bash?
 
Grazie a tutti
 
Ciao
 
 
 
 

 Stavo provando a fare uno script bash un pò particolare 
 
[o si lascia o si cancella tutto. cancello ]
 
Mi sembra tanto il classico problema da compito in classe,
ma una mano si può sempre dare.
 
Proverò a fare qualcosa che forse nessuno ha mai fatto:
 
un flow chart in forma testuale piuttosto che grafica.
(presumo che ci sarà una discussione sulla mia presunzione e sulla riuscita)
 
Cosa ti serve sapere:
 
comandi:  sed (e qui si discuterà sicuramente su tutte le alternative)
programmazione bash: come manipolare le stringhe (vedi sotto)
 
Iniziamo:
 
1 - Come sapere quante righe ci sono nel file
 
    sed -n '$=' <nome file>
 
2 - l'output di sed va salvato in una variabile apposita
 
3 - inizializzi il contatore di riga
 
4 - confronti il contatore di riga con la variabile del punto 2
    finchè il suo valore non è superiore puoi elaborae il file,
    altrimenti hai finito
 
5 - leggi una riga dal file
 
    sed -n ${<contatore>}p <nome file>
 
6 - l'output di sed va salvato in una variabile apposita
 
adesso viene il bello
devi sapere come bash permette di manipolare le stringhe
(cercare, eliminare, contare ecc ecc)
 
su google: "bash string manupulation"
 
se maiuscole e minuscole non sono un problema il consiglio è di convertire
la riga letta in tutte maiuscole/minuscole a tua scelta
 
7 - la riga letta contiene quello che stai cercando
 
7a - copi il valore del contatore di righe in un'altra variabile
 
7b - incrementi il valore del secondo contatore
 
7c - leggi la riga successiva utilizzando il secondo contatore
 
7d - la riga letta contiene quello che stai cercando
 
7d1 - <fai quello che devi>
 
7d2 - continui dal punto 7b
 
8 - incrementi il contatore di riga
 
9 - continui dal punto 4

 la riga letta in tutte maiuscole/minuscole a tua scelta
 
Perche'?
 
-- 
bye, Yoda
 

> Perche'?
 
Suppongo che il motivo sia che Linux è case sensitive e a
ogni "if" bisogna controllare il doppio delle cose.
 
Programmando faccio così pure io; tengo una copia
dell'originale e tutte le varie manipolazioni le faccio
dopo una bella passata di strlwr(qualcosa). Se serve, 
riprendo l'originale e metto in atto i cambiamenti del caso.
 
Se invece il problema non è case sensitive come non detto :D
 
 
-- 
Ho fatto sesso con Control. Domani
provo Alt+Del.
 

 che sta a monte.
 
e che senso ha?
leggi la riga x: esegui una subroutine che ti ributta alla riga x-1: al 
giro dopo torni alla riga x: non è cambiato nulla, quindi la subroutine 
ti ributterà alla riga x-1.
non ne esci più.

 ha scritto nel messaggio
news:shtlve$87f$2...@dont-email.me...

no, perche quando torno faccio una lettura della riga che mi porta
alla riga sucessiva che era quella elaborata poco prima nel secondo
ciclo if.