|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#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 22:17. |
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 13307
|
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à" |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
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++;
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 13307
|
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à" |
|
|
|
|
|
#5 |
|
Messaggi: n/a
|
grazie a tutti!
problema risolto! :* |
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:39.


















