Newsgroup: it.comp.os.linux.iniziare
Titolo: Manipolazione file con SED e GREP

Ciao a tutti.
Sto cercando di modificare un file utilizzando SED e GREP, ma nonostante aver letto di tutto e di più su Internet, aver "Googlato" e aver provato per tre giorni, non riesco a trovare una soluzione. Spiego con un esempio quello che vorrei fare:
 
Ho un file di testo composto da più righe tipo questo:
72.5
22
49.5
55.5
39
82.5
100
93.5
 
Io vorrei aggiungere ".0" a tutti i numeri interi di ogni riga ed ottere in uscita un file tipo questo:
72.5
22.0
49.5
55.5
39.0
82.5
100.0
93.5
 
Non credo sia impossibe, ma non ci riesco proprio.
Confido in voi
 
Grazie mille
Mario


echo '72.5 22 49.5 55.5 39 82.5 100 93.5' | sed -r 's/\s([0-9]+)\s/ \1.0 /
g'


Perfetto !!! Ho provato ed in effetti con "echo" funziona.
 
Ma se io volessi processare un file che contiente quei valori, come faccio?
Se uso " cat file | sed -r 's/\s([0-9]+)\s/ \1.0 /g' ", mi ritrovo in output a video solo i numeri "modificati" mentre quelli già originariamente a posto non me li fa vedere... Scusami ehhh, so che mi sto perdendo in un bicchier d'acqua, ma non riesco a venirne fuori....


Ho fatto altre prove, ma purtroppo anche con "echo" non funziona. Modifica solo un numero SI e un numero NO:
echo '88 22 12 32 44 55 10 62 33 22 44' | sed -r 's/\s([0-9]+)\s/ \1.0 /g'   ->>>>  88 22.0 12 32.0 44 55.0 10 62.0 33 22.0 44
 


$ lsodgf0@monica:~ > cat xxx
72.5
22
49.5
55.5
39
82.5
100
93.5
$ lsodgf0@monica:~ > sed -e 's/^\([0-9]*\)$/\1.0/' xxx
72.5
22.0
49.5
55.5
39.0
82.5
100.0
93.5
$ lsodgf0@monica:~ > cat xxx |sed -e 's/^\([0-9]*\)$/\1.0/'
72.5
22.0
49.5
55.5
39.0
82.5
100.0
93.5
$ lsodgf0@monica:~ >
 
 
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >


Grande Giovanni!!!
Funziona perfettamente.
Grazie mille.
 
Mario


Scusami, ma ho ancora un problema. Nel post precedente ti ho messo solo tutta una fila di numeri, ma purtroppo il file da sistemare è fatto così:
 
12/01/2022 - 10:16 --> 72.5
12/01/2022 - 10:19 --> 22
12/01/2022 - 10:46 --> 49.5
12/01/2022 - 10:59 --> 55.5
12/01/2022 - 11:16 --> 39
12/01/2022 - 11:18 --> 82.5
12/01/2022 - 11:20 --> 100
12/01/2022 - 11:38 --> 93.5
 
Ovviamente, come scritto prima devo modificare solo l'ultima colonna.
Ho provato con "cat xxx | cut -d " " -f5 | sed -e 's/^\([0-9]*\)$/\1.0/' ed in effetti i numeri interi a destra li converte correttamente con il ".0" finale, ma mi sega via tutto il resto che invece dovrei mantenere.
 
Hai mica ancora una soluzione?
Grazie
Mario

 Hai mica ancora una soluzione?
 
awk {printf "%s %s %s %s %5.1f\n",$1,$2,$3,$4,$5} mio_file_input
 
12/01/2022 - 10:16 -->  72.5
12/01/2022 - 10:19 -->  22.0
12/01/2022 - 10:46 -->  49.5
12/01/2022 - 10:59 -->  55.5
12/01/2022 - 11:16 -->  39.0
12/01/2022 - 11:18 -->  82.5
12/01/2022 - 11:20 --> 100.0
12/01/2022 - 11:38 -->  93.5
 
Se ci son pure le migliaia, metti 6.1 invece di 5.1 ciao
 
-- 
Yoda
 


Mi da questo errore:
awk: line 1: no arguments in call to printf
awk: line 2: missing } near end of file


Ok. Ho capito... Manca l'apice singolo prima della parentesi graffa aperta e dopo la parentesi graffa chiusa

 awk {printf "%s %s %s %s %5.1f\n",$1,$2,$3,$4,$5} mio_file_input
 
+1


 awk {printf "%s %s %s %s %5.1f\n",$1,$2,$3,$4,$5} mio_file_input
 
CORRIGE
awk '{printf "%s %s %s %s %5.1f\n",$1,$2,$3,$4,$5}' mio_file_input
 
-- 
bye, Yoda
 

 graffa aperta e dopo la parentesi graffa chiusa
 
Si' scusa andavo di fretta e echo non li poteva mettere, ho
dimenticato di aggiungerli dopo ciao
 
-- 
Yoda
 


Ma figurati... Mi hai risolto un bel casino...
E poi se hai sbagliato, meglio così... Almeno mi sono messo a capire l'errore e l'ho risolto.. Tutto fa... Grazie ancora. Ciao ciao