[Tech] per gli scriptaroli

Franco Bagnoli franco.bagnoli@unifi.it
Sab 22 Dic 2007 23:08:07 CET


On Dec 22, 2007 7:28 PM, Leonardo Boselli <leo@dicea.unifi.it> wrote:
> > Non voglio essere brutale, è veramente un consiglio spassionato.
>
> nopn sono brutale ma: ho scritto
> (file: nof.pl)
> while (<>) { @s = split('[\t :,]') ;
> print "s[0]\n";
>
> e il programma funziona QUASI ... come faccio a fargli ignorare eventuali
> blank iniziali ?
> e un modo più elegante per richiamarlo che fare
> cat file1 file2 file3 | perl nof.pl | grep -v "#" | grep -v "@" > file0

per questo ti avevo detto di leggere perlrun:

1) l'operatore <> è magico e apre i file uno dopo l'altro, per cui

nof.pl file1 file2 file3

fa quello che vuoi

2) lo switch -n mette il loop

               while (<>) {
                    ...             # your program goes here
                }

3) lo switch -a attiva l'autosplit (-F per definire il delimitatore)

4) infine lo switch -e permette di definire quello che vuoi eseguire,

per cui dovrebbe essere qualcosa del genere

perl -an  -F':' -F',' -F'\s'  -e 'print "$F[0]\n" unless /^[ #@\n]/'
file1 file2 file3

ma la virgola non mi funziona come separatore, non so perché, quindi meglio

perl -ne 'unless (/^[ #@\n]/) {@F = split /[\t:\s,]/; print
"$F[0]\n"}' file1 file2 file3



-- 
Franco Bagnoli <franco.bagnoli@unifi.it> <franco.bagnoli@gmail.com>
Lab. Fisica dei Sistemi Complessi, Dip. Energetica & CSDC
Universita' di Firenze, via S. Marta, 3 I-50139 Firenze, Italy.
Tel. +39 0554796592, fax: +39 0554796342



Maggiori informazioni sulla lista flug-tech