Newsgroup: it.comp.os.linux.development
Titolo: [SCRIPT] - Lettura Dati

Salve a tutti,
ho uno script che crea un file (pippo.txt) con una struttura simile a
questa:
colonna1    colonna2
colonna11    colonna22
(tra le due colonne c'č un tab "\t") ho scritto questo codice:
for file in 'cat $nome_file'; do
    echo $file
done
L'output č:
colonna1
colonna2
colonna11
colonna22
Io vorrei leggere la riga in un sol colpo, assegnando i valori a due
variabili . E' possibile?
Con awk? Se si come?
Grazie a tutti per l'attenzione


è possibile con tutto :)
in awk:
sh-2.04$ awk  '{print  $1, "ciao",$2 }' tmp.txt 
col1 ciao col11
col2 ciao col22
sh-2.04$ cat tmp.txt
col1    col11
col2    col22

 writes:
  B> Salve a tutti, ho uno script che crea un file (pippo.txt) con una
  B> struttura simile a questa:
  B> colonna1 colonna2 
  B> colonna11 colonna22
[...]
  B> Io vorrei leggere la riga in un sol colpo, assegnando i valori a
  B> due variabili . E' possibile?  Con awk? Se si come?
cat $nome_file | while read C1 C2; do echo "> $C1 - $C2 <" ; done
 
Qualora i campi dovessero aumentare, potresti valutare l'utilizzo di
un array al posto delle variabili semplici, sempre con read (-a). Ti
rimando al manuale info di bash per saperne di piu`.
Al posto di cat, potreti usare <, cambiando opportunamente la sintassi.
ciao,
nico

 Grazie a tutti per l'attenzione
prego,
-- 
+--------+ | ASCII ribbon campaign ( ) | 
www.autistici.org/kral
|  kral  | |  - against HTML email  X  |
+--------+ |              & vCards / \ | my gpg id = 0x7C946947

quello che c'è dopo del tab lo metti in due variabili $1 $2.
brutto brutto brutto :)
usando l'opzione -n perl cicla da solo su ogni riga, ed usando -a
splitta automaticamente la linea mettendo gli elementi nell'array @F
(come awk):
sh-2.04$ perl -ane 'print "@F[1] - @F[0]\n"' tmp.txt
1.2 - 1.1
2.2 - 2.1
sh-2.04$ cat tmp.txt 
1.1     1.2
2.1     2.2
praticamente identico anche in ruby, se ti interessa :) 

 (come awk):
Cmq sono abbastanza novellino sugli one-liner...
	perl -ne '/(.*)\t(.*)/; print "$1 - $2\n"' p1.dat
funziona lo stesso e non so se sia più o meno elegante della tua...
Sicuramente con le regexp si ha un controllo più ampio che non con
l'autosplit. (Anche se ho notato l'opzione -F).
Se poi si vuole discutere sui dot-star che ho usato, quello è un'altro
discorso... :)
Ciao,


 (tra le due colonne c'è un tab "\t") ho scritto questo codice:
...
[cowo@braveheart cowo]$ cat prova.txt
12      qwe
13      asd
14      zxc
[cowo@braveheart cowo]$ while read LINE;do echo $LINE|cut -f 1; done <prova.txt
12
13
14
Probabilmente si può fare tutto direttamente con la read.
NP: White Skull - In Caesar We Trust
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
        **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
 [cowo@braveheart cowo]$ make sex
    make: *** No rule to make target 'sex'.  Stop. 

 14
Scusa, fare: 
$ cut -f 1 prova.txt
Era troppo semplice? :-)
-- 
Andrea Bergia - studente              Linux Registered User #281550

 Era troppo semplice? :-)
Non sarebbe stato abbastanza fico! 
E non sarebbe andato bene, visto che gli servivano entrambe le colonne.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail** 
       -<! Riding from wastelands Black were their skies
              My armour's still bleeding Ripped by fire and ice !>-
                    Lost Horizon - The Kingdom Of My Will

 variabili . E' possibile?
Ti hanno risposto in tanti,
io aggiungo solo che se vuoi leggere la riga in una volta sola puoi fare 
cosi'
IFS=$'\n'
for file in $(cat $nome_file); do
     echo $file
done
IFS sta per internal field separator
man bash
/IFS
byez
-- 
Enter any 11-digit prime number to continue...