[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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 COSTS­ACTUAL ­-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 COSTS­ACTUAL;­-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: