spostamento testo con sed [RISOLTO]

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.
Rispondi
Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

spostamento testo con sed [RISOLTO]

Messaggio da tgmx »

Ciao Ragazzi,
ho un problema con sed che non riesco proprio a risolvere (date le mie scarse conoscenze in materia):

in un file di testo ho diversi blocchi di questo tipo :

Codice: Seleziona tutto

LOAD TABLE   CALENDARIO 
 FROM '/tmp/UNLOAD/193.dat'
 FORMAT 'ASCII'
 QUOTES ON ESCAPES ON STRIP OFF
 CHECK CONSTRAINTS OFF
 DELIMITED BY ','
io li dovrei trasformare in:

Codice: Seleziona tutto

LOAD DATA INFILE  '/tmp/UNLOAD/193.dat' 
 INTO TABLE   CALENDARIO
 FIELDS TERMINATED BY ';'
Di fatto devo trasformare uno script per SYBASE in uno per MYSQL.

La cosa difficile è invertire la posizione di '/tmp/UNLOAD/193.dat' con CALENDARIO.
Pare che sed possa fare questo lavoro ma non ho capito come. Avete suggerimenti?
Ultima modifica di tgmx il mer 7 gen 2009, 14:36, modificato 1 volta in totale.

Avatar utente
whites11
Linux 4.x
Linux 4.x
Messaggi: 1147
Iscritto il: ven 30 set 2005, 13:54
Località: Udine

Re: spostamento testo con sed

Messaggio da whites11 »

credo che sia più facile farlo con awk, piuttosto che con sed.
Per imparare awk ci sono tonnellate di guide online (basta che cerchi un po su google).
potresti anche provare a cercare online un convertitore già pronto, visto che il lavoro che devi fare è probabilmente qualcosa che è già stato fatto...

Avatar utente
ZeD
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 28 ott 2005, 12:30
Slackware: 12.1
Località: Terra

Re: spostamento testo con sed

Messaggio da ZeD »

tgmx ha scritto:in un file di testo ho diversi blocchi di questo tipo :

Codice: Seleziona tutto

LOAD TABLE   CALENDARIO 
 FROM '/tmp/UNLOAD/193.dat'
 FORMAT 'ASCII'
 QUOTES ON ESCAPES ON STRIP OFF
 CHECK CONSTRAINTS OFF
 DELIMITED BY ','
io li dovrei trasformare in:

Codice: Seleziona tutto

LOAD DATA INFILE  '/tmp/UNLOAD/193.dat' 
 INTO TABLE   CALENDARIO
 FIELDS TERMINATED BY ';'

Codice: Seleziona tutto

$ echo "LOAD TABLE   CALENDARIO
FROM '/tmp/UNLOAD/193.dat'
FORMAT 'ASCII'
QUOTES ON ESCAPES ON STRIP OFF
CHECK CONSTRAINTS OFF
DELIMITED BY ','"  | awk '/LOAD TABLE .*/ { TABLE = $3 }
/FROM .*/ { FROM = $2 }
END { print "LOAD DATA INFILE " FROM "\nINTO TABLE " TABLE "\nFIELDS TERMINATED BY '\'';'\''" }'
LOAD DATA INFILE '/tmp/UNLOAD/193.dat'
INTO TABLE CALENDARIO
FIELDS TERMINATED BY ';'
$
ovviamente non ti serve l'echo :) avrai una cosa come

Codice: Seleziona tutto

 $ awk '...BLABLABLA...' < file.sysbase > file.mysql 

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: spostamento testo con sed

Messaggio da tgmx »

Grazie dell'aiuto...
alla fine ho voluto trovare la soluzione con sed e pare che la seguente funzioni:

Codice: Seleziona tutto

sed -e "/LOAD[ ]*TABLE[ ]*.*$/{
N
}
/[ ]*FROM[ ]*['].*['].*$/s/LOAD[ ]*TABLE[ ]*\(.*\)\n[ ]*FROM[ ]*\(['].*[']\).*/LOAD DATA INFILE \2\nINTO TABLE \1/g"
in questo modo riesco ad effettuare la modifica in ogni parte del file dove si presenta la situazione descritta sopra.

Rispondi