Repository 32bit  Forum
Repository 64bit  Wiki

problema AWK

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

problema AWK

Messaggioda aramcos81 » mer dic 16, 2009 16:44

Ciao a tutti,
vorrei sapere come gestire questo problema con AWK.
Ho un file composto da queste righe:

Codice: Seleziona tutto
col: 104 - Trigger Auto Recharge 6 : N
col: 105 - Spare String 2 :
col: 106 - Spare String 3 :
col: 107 - Spare String 4 :
col: 108 - Spare String 5 :
col: 109 - Spare Flag 1 : N
col: 110 - Spare Flag 2 : N
col: 111 - Spare Flag 3 : N
col: 112 - Spare Flag 4 : N
col: 113 - Spare Flag 5 : N
col: 114 - Locked By IT : N
col: 115 - Locked By SurePay : N
col: 0 - Special Dest 1 : 3480000040
col: 1 - Special Dest 2 : 3480000041
col: 2 - Special Dest 3 : 3480000042
col: 3 - Special Dest 4 : 3480000043
col: 4 - Special Dest 5 :
col: 5 - Special Dest 6 :
col: 6 - Special Dest 7 :
col: 7 - Special Dest 8 :
col: 8 - Special Dest 9 :
col: 9 - Special Dest 10 :
col: 10 - MSISDN : 393402200007
col: 11 - Identifier : 104
col: 12 - Special Dest Type : GN List
col: 13 - Spare String : ALL
col: 0 - Special Dest 1 : 3480000070
col: 1 - Special Dest 2 : 3480000071
col: 2 - Special Dest 3 : 3480000072
col: 3 - Special Dest 4 : 3480000073
col: 4 - Special Dest 5 : 3480000074
col: 5 - Special Dest 6 : 3480000075
col: 6 - Special Dest 7 : 3480000076
col: 7 - Special Dest 8 : 3480000077
col: 8 - Special Dest 9 :
col: 9 - Special Dest 10 :
col: 10 - MSISDN : 393402200007
col: 11 - Identifier : 105
col: 12 - Special Dest Type : GN List
col: 13 - Spare String : ALL

Vorrei crearmi un' array bidimensionale con i seguenti campi:
Codice: Seleziona tutto
104                      3480000040
                           3480000041
                           3480000042
                           3480000043
105                      3480000070
                           3480000071
                           3480000072
                           3480000073
                           3480000074
                           3480000075
                           3480000076
                           3480000077


Ovvero dovrei greppare Special Dest con il campo pieno fino a quando trova Identifier e crearmi quella matrice in cui in corrispondenza dell'identifier ci saranno i rispettivi Special Dest.
Devo utilizzare per forza AWK!!!

Vi ringrazio in anticipo
aramcos81
Linux 1.0
Linux 1.0
 
Messaggi: 47
Iscritto il: lun giu 08, 2009 16:43
Nome Cognome: Cosimo
Slackware: 12.1

Re: problema AWK

Messaggioda navajo » mer dic 16, 2009 21:15

come al solito, si prega di usare il tag Code quando si devono postare dei listati che contengono comandi e/o output di risposta di log o di errori forniti da comandi.
Grazie
Avatar utente
navajo
Staff
Staff
 
Messaggi: 3502
Iscritto il: gio gen 08, 2004 1:00
Località: Roma
Nome Cognome: Massimiliano
Slackware: 13.37 (x86_64)
Kernel: 2.6.37.6
Desktop: KDE 4.7.0 (Alien)

Re: problema AWK

Messaggioda nico giraldi » gio dic 17, 2009 16:36

prova qualcosa del genere:

Codice: Seleziona tutto
/Special Dest/{
   if($NF==":"){
      while((getline)>=0){
         if($4=="Identifier"){
            matrix[$NF] = record
            record = ""
            break
         }}}else{
      record = record " " $NF
        }}
END{
   for(i in matrix)
      print i,matrix[i]
}


Ovviamente non garantisco (l'ho buttato giù in un momento di nostalgia per quando usavo solo AWK) ma puoi usarlo come base:
Codice: Seleziona tutto
awk -f sl.awk test
104  3480000040 3480000041 3480000042 3480000043
105  List 3480000070 3480000071 3480000072 3480000073 3480000074 3480000075 3480000076 3480000077
Avatar utente
nico giraldi
Linux 2.0
Linux 2.0
 
Messaggi: 109
Iscritto il: lun set 10, 2007 1:56
Località: Roma
Slackware: 14.0
Kernel: 3.6.2
Desktop: xfce


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti