[Linux-Biella] awk cut caz maz...
Andrea Ferraris
linux@ml.bilug.linux.it
Sun, 21 Mar 2004 09:38:15 +0100
> From: <vallinidaniele@libero.it>
[...]
> Ti invio una soluzione in perl.
> Non chiarisci pero' quali sono gli elementi stabili nelle righe da
elaborare.
> Supponendo stabile la posizione dei dati sulle colonne e considerando di
> elaborare solo le prime 3 righe farei:
>
> #!/usr/bin/perl
> print "\nelaboro la rumenta di LeOS\n";
> open A, "path del file input"; # apro file in lettura
> $"=""; # separatore di lista nullo
Hai voglia di spiegarmelo? Ovvero cos'e` un operatore di lista e
nei dettagli quei 3 doppi apici.
> @riga=<A>; # creo array righe pagina
> foreach $numriga(0..2) # processo 3 righe dati
E se invece le voglio processare tutte?
> # (attenz.riga 0 e' la prima)
> {@dati=split (//,@riga[$numriga]); # righe dati
> $ora="@dati[7..11]"; # ora
> $dominio="@dati[23..34]"; # dominio
> open B, ">>path del file output"; # apro file in append (quando
> # rilanci lo script azzera il file output)
> print B "$ora $dominio\n"; # scrivo i dati richiesti
> }
> close A; # chiudo il descrittore
> print "\nfinito di elaborare la rumenta di LeOS\n";
>
> Altrimenti devi cambiare separatore di lista e casinare ulteriormente
> sulle righe in output.
Questa soluzione mi ha fatto venire in mente l'analogo in sh,
vediamo quale e` piu` lunga ;-)
#!/bin/sh # funziona probabilmente solo su Linux, altrimenti /usr/bin/sh
echo elaboro la rumenta di LeOS # e qui si risparmiano 2 doppi apici e 2 nl
e 1 ;
while read R # leggo il file (vedi linea del done) mettendo ogni riga nella
variabile R
do
echo `echo $R | cut -c7-11`" "`echo $R | cut -c23-34`
done < "path del file input"
echo finito di elaborare la rumenta di LeOS
Sembra piu` corta ;-) pero` non elabora le prime 3 righe, ma tutte, anche
se, usando dei campi di dimensione fissa, taglieremmo indirizzi IP con piu`
di 12 caratteri, come p.es. 192.168.77.111.
Come postilla aggiungerei che sulle circa 700 macchine UNIX (circa 60%
Solaris,
35% HP-UX e 5% fra Linux e Unix Digital) su cui mi capita di dover mettere
le mani in questo periodo, di default perl non c'e` mentre c'e` la shell con
le sue utilities e awk (come al solito, quello di default di Solaris fa
cagare e per fare cose carine bisogna usare nawk che clementemente hanno
messo a disposizione, come per usare egrep bisogna andare a cercarsela col
lanternino in /usr/xpg4/bin).
Andrea