Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] estrarre data da nome file

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[BASH] estrarre data da nome file

Messaggioda Absolut » mar giu 22, 2010 16:47

Ciao ragazzi, ho un file che si chiama db_cc_1006200100.dmp. Di questo file sono riuscito ad estrarre la data, ovvero la parte: 100620

Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:

pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"

solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo.

vorrei però evitare che mi venga stamapto a schermo....

come posso fare?!

vi ringrazio!!!
Avatar utente
Absolut
Linux 3.x
Linux 3.x
 
Messaggi: 1465
Iscritto il: gio feb 10, 2005 0:00
Località: Roma
Slackware: current

Re: [BASH] estrarre data da nome file

Messaggioda Mario Vanoni » mar giu 22, 2010 16:58

Absolut ha scritto:Ciao ragazzi, ho un file che si chiama db_cc_1006200100.dmp. Di questo file sono riuscito ad estrarre la data, ovvero la parte: 100620

Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:

pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"

solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo.

vorrei però evitare che mi venga stamapto a schermo....

come posso fare?!

vi ringrazio!!!

Elimina il p{rint] finale.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] estrarre data da nome file

Messaggioda targzeta » mar giu 22, 2010 17:05

Absolut ha scritto:...
Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:

pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"

solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo....

Ma tu non volevi 20/06/10, perchè dici che stampa 10/06/2010 e che è corretto? Comunque
Codice: Seleziona tutto
 pippo=`echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"`


Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6105
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] estrarre data da nome file

Messaggioda proffi » mar giu 22, 2010 20:40

Una soluzione diversa può anche essere lavorare con le sottostringhe.
Supponendo che la data che hai estratto dal nome del file sia memorizzata in una variabile, ne puoi facilmente estrarre delle parti.

Codice: Seleziona tutto
data=100620
pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
echo $pippo
20/06/10
Avatar utente
proffi
Linux 2.0
Linux 2.0
 
Messaggi: 135
Iscritto il: gio ago 12, 2004 23:00
Località: Lunano
Slackware: 13.37

Re: [BASH] estrarre data da nome file

Messaggioda ZeroUno » mar giu 22, 2010 23:22

proffi ha scritto:Una soluzione diversa può anche essere lavorare con le sottostringhe.

wow, questa non la conoscevo.
Ho imparato una cosa nuova :-D (andavo sempre di sed,cut,awk e simila)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4254
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [BASH] estrarre data da nome file

Messaggioda Mario Vanoni » mer giu 23, 2010 13:55

proffi ha scritto:Una soluzione diversa può anche essere lavorare con le sottostringhe.
Supponendo che la data che hai estratto dal nome del file sia memorizzata in una variabile, ne puoi facilmente estrarre delle parti.

Codice: Seleziona tutto
data=100620
pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
echo $pippo
20/06/10

Non la conoscevo nemmeno io,
ma vale solo se sul sistema esiste bash(1),
quindi non e` portabile su altre shell/su altri sistemi!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] estrarre data da nome file

Messaggioda proffi » mer giu 23, 2010 14:06

Sì certo, ma d'altra parte era specificato nel titolo del topic che si trattava di bash ;-). Lo trovo un modo più semplice ed elegante di estrarre parti di stringhe.
Con altre shell si ottiene un "bad substitution".

Io in ogni caso la trovo una funzione utilissima e molto versatile, lavoro spesso con file in cui la data è nel nome del file, e ho automatizzato in maniera efficace tante operazioni utilizzando le sottostringhe della bash.
Avatar utente
proffi
Linux 2.0
Linux 2.0
 
Messaggi: 135
Iscritto il: gio ago 12, 2004 23:00
Località: Lunano
Slackware: 13.37

Re: [BASH] estrarre data da nome file

Messaggioda ZeroUno » mer giu 23, 2010 14:48

proffi ha scritto:Con altre shell si ottiene un "bad substitution".


Solitamente la bash di linux, se viene richiamata come sh (/bin/sh è un link a /bin/bash) dovrebbe comportarsi come una sh standard, ma sembra che così non sia. Infatti accetta quella sintassi.
Ho una macchina solaris che ha una vera sh, ed effettivamente lì non funge.


Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4254
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [BASH] estrarre data da nome file

Messaggioda Mario Vanoni » mer giu 23, 2010 14:53

proffi ha scritto:Sì certo, ma d'altra parte era specificato nel titolo del topic che si trattava di bash ;-). Lo trovo un modo più semplice ed elegante di estrarre parti di stringhe.
Con altre shell si ottiene un "bad substitution".

Io in ogni caso la trovo una funzione utilissima e molto versatile, lavoro spesso con file in cui la data è nel nome del file, e ho automatizzato in maniera efficace tante operazioni utilizzando le sottostringhe della bash.

Hai perfettamente ragione!
Il titolo specificava [BASH], ma lui usava sed(1) che e` portabile!
La tua soluzione _elegantissima_ funziona solo in ambiente GNU/Linux/bash.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] estrarre data da nome file

Messaggioda proffi » mer giu 23, 2010 15:22

ZeroUno ha scritto:Solitamente la bash di linux, se viene richiamata come sh (/bin/sh è un link a /bin/bash) dovrebbe comportarsi come una sh standard, ma sembra che così non sia. Infatti accetta quella sintassi.
Ho una macchina solaris che ha una vera sh, ed effettivamente lì non funge.


In ufficio abbiamo una macchina con ubuntu e anche lì se si usa sh il codice che ho scritto non funziona.
In effetti, su slackware sh è un link simbolico a bash, mentre in ubuntu è un link a dash, che, a parte per il detersivo, non avevo mai sentito nominare prima di adesso :) .
Avatar utente
proffi
Linux 2.0
Linux 2.0
 
Messaggi: 135
Iscritto il: gio ago 12, 2004 23:00
Località: Lunano
Slackware: 13.37

Re: [BASH] estrarre data da nome file

Messaggioda ZeroUno » mer giu 23, 2010 16:42

a quanto sembra anche la shell dell'initrd di slackware accetta quella sintassi.
L'initrd (per chi ha messo il kernel generic se lo può ritrovare in /boot/initrd-tree, e chi ha messo l'huge può dare "mkinitrd -c" secco per crearlo) utilizza il programma busybox che è un collezionatore di programmini minimali. tra questi sh.
date 'chroot /boot/initrd-tree /bin/sh' e ridate il comando.

P.S.:
mi viene in mente ora..
la shell 'base' di slackware (a cui credo che a suo tempo sh linkava) è ash.
provate
Codice: Seleziona tutto
ash
data=100620

pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
Syntax error: Bad substitution
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4254
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [BASH] estrarre data da nome file

Messaggioda Absolut » gio giu 24, 2010 9:35

grazie ragazzi!
Avatar utente
Absolut
Linux 3.x
Linux 3.x
 
Messaggi: 1465
Iscritto il: gio feb 10, 2005 0:00
Località: Roma
Slackware: current


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti