Come convertire da un formato data in un altro formato?


11

Ho un problema con il mio formato data. Voglio passare da un formato all'altro e viceversa. I miei formati di data sono

Formato 1

YYYY-MM-DD

Formato 2

MM/DD/YYYY

Voglio cambiare il formato 1 nel formato 2 e il formato 2 nel formato 1.


o essere più chiari, ho il file file1 nome: data 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. L'output richiesto è 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 e viceversa
AiB

Le barre in avanti sono uno dei due soli caratteri che non possono essere in un nome file * nix ...
evilsoup

Risposte:


14

Usa GNU 'date' per questo. Convertirà anche tra altri formati per te (vedi date --helpl'elenco dei formati).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

per essere più chiari, ho il file file1 nome: data 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. L'output richiesto è 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 e viceversa
AiB

1
@Abraham come non soddisfa questo requisito?
Giordania,

6

Supponendo che ci siano date in forma di testo che devono essere convertite

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

E viceversa

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

per essere più chiari, ho il file file1 nome: data 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. L'output richiesto è 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 e viceversa
AiB

Grazie 1_CR, ora funziona dopo che ho modificato un po '!! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' file di dati
AiB

@Abraham, dovresti tentare la fortuna con l' dateapproccio di drewbenn , che è sicuramente più elegante
iruvar,

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

Se hai un file con molte di queste date, uno per riga:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

Usando sed come segue:

$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13

0

Rispondendo alla domanda chiarita nei commenti su come modificare il formato della data in un nome file, utilizzare una variante dell'approccio di drewbenn gnu date. Questo comando trova tutti i file nella cartella locale e reindirizza solo il nome del file xargs, sostituendo il datenome file modificato come secondo argomento a mvcui esegue la ridenominazione.

L'utilizzo aggiuntivo e leggermente tortuoso della bashsostituzione variabile è necessario per bashvalutare il datecomando.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.