Repository 32bit  Forum
Repository 64bit  Wiki

problema AWK

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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 della regola 5 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 15: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 15:43
Nome Cognome: Cosimo
Slackware: 12.1

Re: problema AWK

Messaggioda navajo » mer dic 16, 2009 20: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: 3765
Iscritto il: gio gen 08, 2004 0: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 15: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: 114
Iscritto il: lun set 10, 2007 0:56
Località: Roma
Slackware: 14.0
Kernel: 3.6.2
Desktop: xfce


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti