Newsgroup: it.comp.os.linux.iniziare
Titolo: awk  leggere i parametri           Importante

Salve a tutti!!!!
Sono ancora alle prese con uno script AWK. Il mio problema è il
seguente:
Ho una tabella fatta di 26 colonne e circa 100.000 righe:
             1  2  3  4  5   ........ 26
             ...........................
             ...........................
             4  8  4  3  2            19
Voglio realizzare uno script che mi legge da shell le colonne che
desidero stampare.
Sò come fare per stampare...MI INTERESSA SAPERE COME COMUNICARE ALLO
SCRIPT LE COLONNE CHE VOGLIO STAMPARE, IN QUANTO LO SCRIPT DEVE ESSERE
LO STESSO MA LE COLONNE DA STAMPARE DEVONO ESSERE DIVERSE DI VOLTA IN
VOLTA.
Grazie 
Vilomb

 Vilomb
-- 
Lorenzo "Paulatz" Paulatto
Trieste
Dagli errori di Windows 98:
1070 0x042E Dopo l'avvio, il servizio si è sospeso in uno stato di attesa.
1440 0x05A0 Schermo già bloccato.

echo ${!b}
AWK un po' lo sapevo, anche se è passato un numero ridicolo di anni da
quando l'ho usato l'ultima volta, ma francamente della tua risposta
non ho capito nulla.
Io avrei suggerito di usare ARGV per comunicare il numero delle
colonne da stampare, e quindi un ciclo for per stamparle.
Qualcosa come:
# file prova.awk
    BEGIN {
         for (n = 2; n < ARGC; ++n) {
             colonne[ind++] = ARGV[n];
         }
         ARGC = 2;
    }
    {
       for (n in colonne) {
           printf "%d: %s\n", n, $(colonne[a]);
       }
       print;
    }
#
Da invocare (ponendo che in prova.txt ci siano i dati da elaborare)
con:
 
 awk -f prova.awk prova.txt 2 3 5 6
o qualche sia la sequenza dei campi che si vogliono stampare.
Il tutto, s'intende, con i dubbi determinati e la comprensione
impetrata da anni e anni di ruggine.
Ciao.
P.S. Ma... Perl no? Non che sia in sé meglio per il compito richiesto,
ma saprei dare una risposta un po' più certa.

 non ho capito nulla.
Al di là dell'arroganza del tale a cui ho risposto quelli che ho scritto 
sono comandi per bash. Provali.


sono comandi per bash. Provali.
Ma lui appunto chiedeva di awk, non di bash. E per provarli bisognerebbe
capire che relazione hanno con la domanda posta, e tale relazione a me
continua a sembrare alquanto oscura.
Quanto all'arroganza... bah... sono troppo vecchio per questo gioco. Leggo
una domanda, se so rispondo... ed è già abbastanza complicato così.
Ciao.

 ma saprei dare una risposta un po' piů certa.

Perl mi fa piacere, magari faccio prima.
Hmmm... no, se non l'hai mai usato è difficile che tu faccia prima.
L'equivalente Perl del codice Awk che ho postato potrebbe essere:
        # file 
colonne.pl
        use Getopt::Long;
        my @colonne;
        GetOptions("colonne=s" => \@colonne);
        @colonne = split(/,/, join(',', @colonne));
        while (<>) {
                split ' ';
                for my $colonna (@colonne) {
                        print $colonna, ': ', @_[$colonna], "\n";
                }
                print "\n";
        }
E già qui, mi rendo conto, c'è materia di studio per un buon numero di
lunghe serate piovose.
La cosa carina è che puoi (o meglio, devi) invocare lo script così:
 
      perl 
colonne.pl
 --colonne=2,3,7,12 dati.txt
Il modulo Getopt si incarica di gestire le opzioni.
Qualcosa di ancora più simpatico si potrebbe fare con l'uso dei format. Ma
a questo punto la cosa può diventare davvero abbastanza complicata.
Perl può dare molte soddisfazioni in questo genere di lavori, ma richiede
un investimento iniziale considerevole. Se pensi che possa valere la pena
di metterti nell'impresa, se ne può parlare su it.comp.lang.perl. Se hai
già investito del tempo nell'apprendimento di Awk, può invece convenirti
continuare con quello, che è comunque perfettamente adeguato al trattamento
di dati in formato testo.
Ciao.

...


...
