[OT] [o forse no?] bash:parsing dei files di testo

2005-02-14 Per discussione Lucio
Ciao a tutti.

Oggi parliamo di bash.

Ho bisogno di fare uno script in bash che interpreti un file di testo che si
presenta in questo formato:

# commenti
campo1riga1 campo2riga2 campo3riga3 campo4riga4
campo1riga2 campo2riga2 campo3riga2 campo4riga2

eccetera. Il numero di righe non è noto a priori: ho quindi pensato che un
for potesse andare bene. I campi sono separati dal carattere di
tabulazione, quindi /usr/bin/cut sembra tornare utile. I commenti li
elimino con un grep -v ^#. Peccato che il for non legga i dati una riga
alla volta ma un campo alla volta, ovvero

for i in `cat $FILETESTO | grep -v ^#` ; do
  echo $i;
  echo Passo al valore successivo;
done

mi restituisce:
campo1riga1
Passo al valore successivo
campo2riga1
Passo al valore successivo
ecc...

mentre quello che avrei bisogno io è

campo1riga1 campo2riga2 campo3riga3 campo4riga4
Passo al valore successivo
campo1riga2 campo2riga2 campo3riga2 campo4riga2
Passo al valore successivo

in modo da poter ritagliare ogni singolo campo con /usr/bin/cut.

Sapete come posso fare per far leggere al for il file una riga per volta
invece che un campo per volta? Oppure esiste qualcosa di diverso dal for
per questo scopo? 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [OT] [o forse no?] bash:parsing dei files di testo

2005-02-14 Per discussione Lucio
Errata corrige: ai fini della chiarezza della mia domanda, segnalo che il
file di testo è (ovviamente):
# commenti
campo1riga1 campo2riga1 campo3riga1 campo4riga1
campo1riga2 campo2riga2 campo3riga2 campo4riga2

E non:
 # commenti
 campo1riga1 campo2riga2 campo3riga3 campo4riga4
 campo1riga2 campo2riga2 campo3riga2 campo4riga2

Scusate la distrazione.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [OT] [o forse no?] bash:parsing dei files di testo [RISOLTO]

2005-02-14 Per discussione Lucio
Non so se esistano soluzioni più efficienti, ma quella che ho trovato va più
che bene per il mio scopo:

http://www.linuxgazette.com/issue54/okopnik.html


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [OT] [o forse no?] bash:parsing dei files di testo

2005-02-14 Per discussione dot deb
On Mon, 14 Feb 2005 09:28:13 +0100, Lucio [EMAIL PROTECTED] wrote:
 Errata corrige: ai fini della chiarezza della mia domanda, segnalo che il
 file di testo è (ovviamente):
 # commenti
 campo1riga1 campo2riga1 campo3riga1 campo4riga1
 campo1riga2 campo2riga2 campo3riga2 campo4riga2
 

Non so bene cosa debba fare il tuo script, e molto dipende da questo.
Le soluzioni sono sempre molteplici, ma se non e` chiaro cosa devi fare
e` anche difficile provare ad indovinare.

Comunque, la butto li`, prova ad abbandonare for e usa sed.
a.



Re: [OT] [o forse no?] bash:parsing dei files di testo

2005-02-14 Per discussione Andrea Ganduglia
On Mon, 14 Feb 2005 09:20:35 +0100, Lucio [EMAIL PROTECTED] wrote:
 Ciao a tutti.
 
 Oggi parliamo di bash.
 
 Ho bisogno di fare uno script in bash che interpreti un file di testo che si
 presenta in questo formato:
 
 # commenti
 campo1riga1 campo2riga2 campo3riga3 campo4riga4
 campo1riga2 campo2riga2 campo3riga2 campo4riga2
 
 eccetera. Il numero di righe non è noto a priori: ho quindi pensato che un
 for potesse andare bene. I campi sono separati dal carattere di
 tabulazione, quindi /usr/bin/cut sembra tornare utile. I commenti li
 elimino con un grep -v ^#. Peccato che il for non legga i dati una riga
 alla volta ma un campo alla volta, ovvero

Puoi usare awk, che sembra guarda un po' fatto a posta. Ammettiamo che
tu abbia bisogno (dire cosa deve fare lo script sarebbe utile) di
recuperare i dati del campo 2 e 3 e di stampare prima 3 e poi 2...

cat file | grep -v # | awk '{print $3,$2}'

Un buon punto di partenza per awk
http://www.pluto.it/journal/pj9809/awk.html

ciao.