On Friday 18 November 2005 16:36, Andrea Barbaglia wrote: > Ciao a tutti, > ho un file di testo a cacchio che vorrei trasformare in file di testo > con campi separati da punto e virgola. > > Il file ha un formato abbastanza astruso ed è fatto in questo modo: > 91190 MACH HRS EARNED RN/SU 14,199.91 > 91190 MACH HRS EARNED RN/SU OFFSET 14,199.91 > 911921 CLOCK HOURS - ACTUAL 21,995.10 > 911922 CLOCK HOURS - OFFSET 21,995.10 > 911980 ABSORBED REWORK COSTSACTUAL -58,361.53 > > io vorrei ottenere > 91190;MACH HRS EARNED RN/SU;14,199.91 > 91190;MACH HRS EARNED RN/SU OFFSET;14,199.91 > 911921;CLOCK HOURS - ACTUAL;21,995.10 > 911922;CLOCK HOURS - OFFSET;21,995.10 > 911980;ABSORBED REWORK COSTSACTUAL;-58,361.53
Ecco una bozza, prendendo spunto da questo uso delle espressioni regolari puoi variare come preferisci, in base alle tue necessità: $ cat file.txt 91190 MACH HRS EARNED - RN/SU 14,199.91 91190 MACH HRS EARNED - RN/SU OFFSET -14,199.91 911921 CLOCK HOURS -- ACTUAL 21,995.10 911922 CLOCK HOURS - - OFFSET -21,995.10 911980 ABSORBED REWORK COSTS ACTUAL --58,361.53 $ cat file.txt | sed 's/^\([0-9]\+\) /\1;/' > file2.txt $ cat file2.txt 91190;MACH HRS EARNED - RN/SU 14,199.91 91190;MACH HRS EARNED - RN/SU OFFSET -14,199.91 911921;CLOCK HOURS -- ACTUAL 21,995.10 911922;CLOCK HOURS - - OFFSET -21,995.10 911980;ABSORBED REWORK COSTS ACTUAL --58,361.53 $ cat file2.txt | sed 's/\([-]\?[0-9]\+,[0-9]\+.[0-9]\+\)$/;\1/' 91190;MACH HRS EARNED - RN/SU ;14,199.91 91190;MACH HRS EARNED - RN/SU OFFSET ;-14,199.91 911921;CLOCK HOURS -- ACTUAL ;21,995.10 911922;CLOCK HOURS - - OFFSET ;-21,995.10 911980;ABSORBED REWORK COSTS ACTUAL -;-58,361.53 $ È svolto in due passaggi in modo che sia più chiaro. Dell'ultimo numero ho considerato solo l'eventuale primo segno meno (-), poi c'è ancora eventualmente da eliminare qualche spazio. Saluti. alfredo

