[Linuxtrent] Re: manipolazione file

  • From: Guido Brugnara <gdo@xxxxxxxxx>
  • To: linuxtrent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Tue, 2 Apr 2019 15:26:21 +0200 (CEST)

----- Il 2-apr-19, alle 14:58, mauro cavagna <cavagna.mauro@xxxxxxxxx> ha 
scritto: 

Ciao Lele,
grazie della tua risposta.

Un modo è con un minuscolo script Python:

Qualcuno sa se vi è un modo anche in bash?

Eccolo: 

mylinux:~$ (IFS=',';while read -r N; do echo ${N:0:1}$[${N:1:1}-1]${N:2:-1}; 
done) << 'FILE' 
033000,+00.44,-00.76,-00.03,+01.65,+2.7899,+1.2512 
033000,+00.35,-00.75,+00.05,+01.71,+2.7853,+1.2503 
033000,+00.44,-00.73,-00.05,+01.68,+2.7864,+1.2528 
FILE 

bye 
gdo 

Mauro

Il giorno mar 2 apr 2019 alle ore 14:08 Lele Gaifax < [
mailto:lele@xxxxxxxxxxxxxxx ;| lele@xxxxxxxxxxxxxxx ] > ha scritto:

mauro cavagna < [ mailto:cavagna.mauro@xxxxxxxxx ;| cavagna.mauro@xxxxxxxxx ] 

writes:

Ho un problema con la manipolazione di alcuni file di testo. Ho un
centinaio di file che contengono migliaia di righe come queste:

0*3*3000,+00.44,-00.76,-00.03,+01.65,+2.7899,+1.2512

Quello che voglio fare è sottrarre un numero al secondo carattere(numero)
di ogni riga del file, in modo da ottenere questo risultato:

0*2*3000,+00.44,-00.76,-00.03,+01.65,+2.7899,+1.2512

Nel caso sopra quindi sottrarre 1 a 3.

Un modo è con un minuscolo script Python:

with open('p.txt') as f:
for line in f.readlines():
newline = line[:1] + chr(ord(line[1]) - 1) + line[2:].rstrip()
print(newline)

che apre il file, legge riga per riga, calcola la nuova "versione" mantenendo
inalterate le parti precedenti e seguenti al carattere che vuoi cambiare, poi
la stampa su stdout.

ciao, lele.
--
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
mailto:lele@xxxxxxxxxxxxxxx ;| lele@xxxxxxxxxxxxxxx ] | -- Fortunato Depero,
1929.
--
Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto: ;[
mailto:linuxtrent-request@xxxxxxxxxxxxx ;| linuxtrent-request@xxxxxxxxxxxxx ]

--
"Tutto ciò che è necessario per il trionfo del male, è che gli uomini buoni 
non
facciano niente."
Edmund Burke

Other related posts: