Le versioni più recenti di mysqldump creano una insert multipla per gruppi di insert simili. Ad esempio con mysqldump si ottiene:
INSERT INTO `events` VALUES (6582,11,'1223390359:164321',6285,'bla bla bla',10,'2008-10-07 16:39:21','bank_id=60702&charge_id=079208%409001914','BA8CF7E8-947D-11DD-8B00-488D047A8996',NULL,NULL,'079208@9001914'),(6583,11,'1223390362:164327',NULL,'bla bla bla',10,'2008-10-07 16:39:22','bank_id=60702&charge_id=079208%409001914','BB3FCB48-947D-11DD-9E00-488D047A8996',NULL,NULL,'079208@9001914'), ...
aggiungendo il parametro
--extended-insert=false si ottiene
INSERT INTO `events` VALUES (6582,11,'1223390359:164321',6285,'bla bla bla',10,'2008-10-07 16:39:21','bank_id=60702&charge_id=079208%409001914','BA8CF7E8-947D-11DD-8B00-488D047A8996',NULL,NULL,'079208@9001914');
INSERT INTO `events` VALUES (6583,11,'1223390362:164327',NULL,'bla bla bla',10,'2008-10-07 16:39:22','bank_id=60702&charge_id=079208%409001914','BB3FCB48-947D-11DD-9E00-488D047A8996',NULL,NULL,'079208@9001914');
INSERT INTO `events` VALUES (6584,11,'1223390943:167153',NULL,'bla bla bla',10,'2008-10-07 16:49:04','bank_id=60702&charge_id=079208%409001914','15DA559A-947F-11DD-B959-D093047A8996',NULL,NULL,'079208@9001914');
Una collezioncina di trucchi informatici incentrati nel mondo dell'open source con un'occhio di riguardo a linux
lunedì 13 ottobre 2008
venerdì 3 ottobre 2008
Perl Oneliner
Talvolta mi capitano log del tipo:
2008-10-03 09:28:55,204 [10544] Dada::Rufus INFO final status: @101: uid:'+919791100668' appid:'122301909010729816767' : 'book' -> 'ACK' in 1.120 s.
2008-10-03 09:28:56,320 [9779] Dada::Rufus INFO final status: @56: uid:'+557988275004' appid:'122301908814163698835' : 'book' -> 'NACK' in 4.345 s.
2008-10-03 09:28:57,572 [10551] Dada::Rufus INFO final status: @101: uid:'' appid:'122301909010729816767' : 'capture' -> 'NACK' in 2.106 s.
supponiamo che voglia sapere quali diversi tipi di occorrenza del tipo '@...' ci siano.
In questo caso è semplice perché ce ne sono 2
@101 e @56
ma se il log è lungo parecchie centinaia di mega la cosa non è semplice.
Questa cosa, con le coreutils di linux si possono compiere velocemente, ancor più velocemente usando perl.
per estrarre dalle righe le varie etichette eseguo per da riga di comando facendo tornare con un'espressione regolare le parole che iniziano con '@':
perl -ne ' print "$1\n" if ($_=~/@(\w+)/)'
quindi supponendo che queste righe siano nel mio file di log utilizzo
cat filelog| perl -ne ' print "$1\n" if ($_=~/@(\w+)/)'
però così facendo ottengo una serie di
@101
@56
@101
@...
io voglio conoscere le occorrenze uniche e per questo ecco 2 utilità che tornano alla mano sort e uniq
quindi il mio comando diviene
perl -ne ' print "$1\n" if ($_=~/@(\w+)/)' | sort | uniq
e ottengo la lista di occorrenze uniche ricercata
N.B. per ottenere questo risultato non è necessario ricorrere al perl infatti spesso viene utilizzato awk. Per me l'utilizzo di awk se non per le cose più semplici è molto criptico e, conoscendo perl, preferisco utilizzarlo al suo posto.
2008-10-03 09:28:55,204 [10544] Dada::Rufus INFO final status: @101: uid:'+919791100668' appid:'122301909010729816767' : 'book' -> 'ACK' in 1.120 s.
2008-10-03 09:28:56,320 [9779] Dada::Rufus INFO final status: @56: uid:'+557988275004' appid:'122301908814163698835' : 'book' -> 'NACK' in 4.345 s.
2008-10-03 09:28:57,572 [10551] Dada::Rufus INFO final status: @101: uid:'' appid:'122301909010729816767' : 'capture' -> 'NACK' in 2.106 s.
supponiamo che voglia sapere quali diversi tipi di occorrenza del tipo '@...' ci siano.
In questo caso è semplice perché ce ne sono 2
@101 e @56
ma se il log è lungo parecchie centinaia di mega la cosa non è semplice.
Questa cosa, con le coreutils di linux si possono compiere velocemente, ancor più velocemente usando perl.
per estrarre dalle righe le varie etichette eseguo per da riga di comando facendo tornare con un'espressione regolare le parole che iniziano con '@':
perl -ne ' print "$1\n" if ($_=~/@(\w+)/)'
quindi supponendo che queste righe siano nel mio file di log utilizzo
cat filelog| perl -ne ' print "$1\n" if ($_=~/@(\w+)/)'
però così facendo ottengo una serie di
@101
@56
@101
@...
io voglio conoscere le occorrenze uniche e per questo ecco 2 utilità che tornano alla mano sort e uniq
quindi il mio comando diviene
perl -ne ' print "$1\n" if ($_=~/@(\w+)/)' | sort | uniq
e ottengo la lista di occorrenze uniche ricercata
N.B. per ottenere questo risultato non è necessario ricorrere al perl infatti spesso viene utilizzato awk. Per me l'utilizzo di awk se non per le cose più semplici è molto criptico e, conoscendo perl, preferisco utilizzarlo al suo posto.
Iscriviti a:
Post (Atom)