Pagina 1 di 1

spostamento testo con sed [RISOLTO]

Inviato: lun 5 gen 2009, 16:24
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?

Re: spostamento testo con sed

Inviato: mar 6 gen 2009, 11:45
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...

Re: spostamento testo con sed

Inviato: mer 7 gen 2009, 10:55
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 

Re: spostamento testo con sed

Inviato: mer 7 gen 2009, 14:36
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.