Pagina 1 di 1

problema AWK

Inviato: mer 16 dic 2009, 15:44
da aramcos81
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

Re: problema AWK

Inviato: mer 16 dic 2009, 20:15
da navajo
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

Re: problema AWK

Inviato: gio 17 dic 2009, 15:36
da nico giraldi
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