Re: script bash
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
Reply to:
- References:
- script bash
- From: "Andrea Barbaglia" <andrea.barbaglia@grazianotrasmissioni.it>