[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.
Rispondi
Avatar utente
Absolut
Linux 4.x
Linux 4.x
Messaggi: 1465
Iscritto il: gio 10 feb 2005, 0:00
Slackware: current
Località: Roma

[BASH] estrarre data da nome file

Messaggio da Absolut »

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!!!

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [BASH] estrarre data da nome file

Messaggio da Mario Vanoni »

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.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [BASH] estrarre data da nome file

Messaggio da targzeta »

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
proffi
Linux 1.x
Linux 1.x
Messaggi: 135
Iscritto il: ven 13 ago 2004, 0:00
Slackware: 13.37
Località: Lunano

Re: [BASH] estrarre data da nome file

Messaggio da proffi »

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
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: [BASH] estrarre data da nome file

Messaggio da ZeroUno »

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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [BASH] estrarre data da nome file

Messaggio da Mario Vanoni »

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!

Avatar utente
proffi
Linux 1.x
Linux 1.x
Messaggi: 135
Iscritto il: ven 13 ago 2004, 0:00
Slackware: 13.37
Località: Lunano

Re: [BASH] estrarre data da nome file

Messaggio da proffi »

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
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: [BASH] estrarre data da nome file

Messaggio da ZeroUno »

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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [BASH] estrarre data da nome file

Messaggio da Mario Vanoni »

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.

Avatar utente
proffi
Linux 1.x
Linux 1.x
Messaggi: 135
Iscritto il: ven 13 ago 2004, 0:00
Slackware: 13.37
Località: Lunano

Re: [BASH] estrarre data da nome file

Messaggio da proffi »

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
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: [BASH] estrarre data da nome file

Messaggio da ZeroUno »

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
Absolut
Linux 4.x
Linux 4.x
Messaggi: 1465
Iscritto il: gio 10 feb 2005, 0:00
Slackware: current
Località: Roma

Re: [BASH] estrarre data da nome file

Messaggio da Absolut »

grazie ragazzi!

Rispondi