|
|
|
|
Strumenti |
24-01-2007, 20:55 | #1 |
Messaggi: n/a
|
[x esperti && urgente] script avanzato parsing testo
salve gente!
non mi sto a dilungare spiegando la vicenda e le urgenze, arrivo subito al dunque: ho un file di testo con n righe cosi formattato: Codice:
........ mysql -u root -pgood -D robin_www --exec "update dartagnan set user_id ='9009' where username =pippo'" mysql -u root -pgood -D robin_www --exec "update dartagnan set user_id ='9010' where username ='pluto'" mysql -u root -pgood -D robin_www --exec "update dartagnan set user_id ='9011' where username ='paperino" mysql -u root -pgood -D robin_www --exec "update dartagnan set user_id ='blablabla' where username ='minni'" mysql -u root -pgood -D robin_www --exec "update dartagnan set user_id ='bliblibli' where username ='topolino'" ....... il problema nasce dal fatto che ad un certo punto gli id non sono + campi numerici e crescenti, benzi parole alla rinfusa! io vorrei uno script che mi sostituisca, quando il campo degli id fa a farsi fottere (precisamente dopo il 9011), con il numero seguente! nel nostro esempio qindi blablabla diventera' 9012, bliblibli diventera 9013 e cosi via! contanto che i record sono centinaia e centinaia, farlo a mano sarebbe da suidio! chi mi salva la vita, il lavoro e il tunnel carpale? Ultima modifica di sgdfgsgfsgs : 24-01-2007 alle 21:17. |
24-01-2007, 21:58 | #2 |
Senior Member
Iscritto dal: May 2004
Messaggi: 12020
|
Ciao, se ho capito bene le tue esigenze...
é uno script banalissimo (non sono così skillato sul bash sripting) ma dovrebbe rispondere alle tue esigenze. Allora, diciamo che file1 è l'originale, file2 un file di appoggio e file3 l'output. Io farei ad esempio così Codice:
count=9009 cat file1 | awk '{gsub(/ /,";"); print}' > file2 for item in `cat file2` ; do echo $item | awk -F "=" '{print "mysql -u root -pgood -D robin_www --exec \"update dartagnan set user_id ='\''"'$count'"'\'' where username ="$3}' ; let "count=$count+1"; done > file3 Ci saranno sicuramente soluzioni più eleganti....come dicevo, sono alle prime armi Ciao, spero di esserti stato di aiuto
__________________
"Qualunque cosa abbia il potere di farti ridere ancora trent'anni più tardi non è uno spreco di tempo. Credo che le cose di quella categoria si avvicinino molto all'immortalità" |
24-01-2007, 22:02 | #3 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5689
|
mioscript.pl nomefile >filemodificato
Codice:
#!/usr/bin/perl $n = 1; while (<>) { $line = $_; $line =~ /user_id ='(\w*)'/; $user_id = $1; if ($user_id =~ /\d+/) { $n = $user_id; } else { $line =~ s/user_id ='[a-zA-Z]+'/user_id ='$n'/; } print $line; $n++; } |
24-01-2007, 22:05 | #4 |
Senior Member
Iscritto dal: May 2004
Messaggi: 12020
|
Lo ammetto, devo studiare le regexp....
__________________
"Qualunque cosa abbia il potere di farti ridere ancora trent'anni più tardi non è uno spreco di tempo. Credo che le cose di quella categoria si avvicinino molto all'immortalità" |
24-01-2007, 23:34 | #5 |
Messaggi: n/a
|
grazie a tutti!
problema risolto! :* |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:34.