Shell - changer le format d'une date dans un fichier
Résolu/Fermé
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
-
29 juil. 2017 à 22:20
diaz1212 Messages postés 6 Date d'inscription samedi 29 juillet 2017 Statut Membre Dernière intervention 1 août 2017 - 1 août 2017 à 14:36
diaz1212 Messages postés 6 Date d'inscription samedi 29 juillet 2017 Statut Membre Dernière intervention 1 août 2017 - 1 août 2017 à 14:36
A voir également:
- Linux date format yyyymmddhhmmss
- Format epub - Guide
- Telecharger format factory - Télécharger - Conversion & Codecs
- Format apfs - Guide
- Hp format tool - Télécharger - Stockage
- Format odt - Guide
6 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
Modifié le 30 juil. 2017 à 08:57
Modifié le 30 juil. 2017 à 08:57
hello
$ sed -r 's+(..)(..)(..)+\2/\3/+' fichier
17/07/01;4575;58;;test;toto;20170604;titi;tata;;000;
17/07/02;4576;588;d;test2;toto;20170654;titid;tatad;;000;
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
31 juil. 2017 à 15:38
31 juil. 2017 à 15:38
enlever le g du sed ou utiliser awk pour spécifier un No de champ
$ sed 's+\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)+\2/\3/+' fichier
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.0000000;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
$
$ awk -v c=3 'BEGIN {FS=OFS=";"} {$c=substr($c, 3, 2) "/" substr($c, 5, 2) "/" substr($c, 7); print}' fichier
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.0000000;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
Modifié le 1 août 2017 à 10:57
Modifié le 1 août 2017 à 10:57
Bonjour dubcek,
je viens de tester la commande elle fonctionne correctement, sauf que le champ 3 peut des fois être vide et dans ce cas il me met les "/", ci-dessous un exemple:
Fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;LLLLLLLLLL;GGGGGGGGGG;FFFF;VVV
Commande:
awk -v c=3 'BEGIN {FS=OFS=";"} {$c=substr($c, 3, 2) "/" substr($c, 5, 2) "/" substr($c, 7); print}' fichier
resultat:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; / / ;CCCCCCCCCCCC;LLLLLLLLLL;GGGGGGGGGG;FFFF;VVV
Comment je peux enlever les "/" quand le champ est vide ?
et une dernière question, comment faire pour utiliser cette commande sur 2 champs au même temps (par exmple champ 3 et champ 5 au meme temps dans l'exemple ci-dessous)
exemple fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;20170625;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;20170625;GGGGGGGGGG;FFFF;VVV
resultat attendu:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;17/06/25;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;17/06/25;GGGGGGGGGG;FFFF;VVV
Merci d'avance pour votre aide
je viens de tester la commande elle fonctionne correctement, sauf que le champ 3 peut des fois être vide et dans ce cas il me met les "/", ci-dessous un exemple:
Fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;LLLLLLLLLL;GGGGGGGGGG;FFFF;VVV
Commande:
awk -v c=3 'BEGIN {FS=OFS=";"} {$c=substr($c, 3, 2) "/" substr($c, 5, 2) "/" substr($c, 7); print}' fichier
resultat:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; / / ;CCCCCCCCCCCC;LLLLLLLLLL;GGGGGGGGGG;FFFF;VVV
Comment je peux enlever les "/" quand le champ est vide ?
et une dernière question, comment faire pour utiliser cette commande sur 2 champs au même temps (par exmple champ 3 et champ 5 au meme temps dans l'exemple ci-dessous)
exemple fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;20170625;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;20170625;GGGGGGGGGG;FFFF;VVV
resultat attendu:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;17/06/25;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;17/06/25;GGGGGGGGGG;FFFF;VVV
Merci d'avance pour votre aide
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
1 août 2017 à 14:07
1 août 2017 à 14:07
essayer
$ awk -v c="3;5" 'BEGIN {FS=OFS=";"; split(c, a)} {for(n in a)if($a[n] ~ /[0-9]/)$a[n]=substr($a[n], 3, 2) "/" substr($a[n], 5, 2) "/" substr($a[n], 7); print}' fichier
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;17/06/25;FFFFFFFFFF;FFFF;ERT
0561;BBBBBB; ;CCCCCCCCCCCC;17/06/25;GGGGGGGGGG;FFFF;VVV
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
>
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
1 août 2017 à 14:36
1 août 2017 à 14:36
Merci Bcp bubcek, cela répond parfaitement à ce que je veux faire.
Bar
Précisez votre demande :
Vous souhaitez modifier ainsi le fichier toto.d'oc
DateToto.d'oc
Ou bien
Création du fichier toto.d'oc le 21072017 ?
en toto.d'oc créé le 31082018
C'est important car la démarche est differente
Pour l'un c'est timestamp
Pour l'autre c'est modifier un par un ou par groupe
Précisez votre demande :
Vous souhaitez modifier ainsi le fichier toto.d'oc
DateToto.d'oc
Ou bien
Création du fichier toto.d'oc le 21072017 ?
en toto.d'oc créé le 31082018
C'est important car la démarche est differente
Pour l'un c'est timestamp
Pour l'autre c'est modifier un par un ou par groupe
Bonsoir,
Merci pour votre retour,
Je souhaite remplacer le contenu du fichier.
CAD que j'ai déjà un fichier que je souhaite modifier
Merci et espérant être claire
Merci pour votre retour,
Je souhaite remplacer le contenu du fichier.
CAD que j'ai déjà un fichier que je souhaite modifier
Merci et espérant être claire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voici le résultat que je veux obtenir:
17/07/01;4575;58;;test;toto;17/06/04;titi;tata;;000;
17/07/02;4576;588;d;test2;toto;20170604;titid;tatad;;000;
Merci d'avance
17/07/01;4575;58;;test;toto;17/06/04;titi;tata;;000;
17/07/02;4576;588;d;test2;toto;20170604;titid;tatad;;000;
Merci d'avance
Merci pour votre réponse, mais il manque la date au milieu de la première ligne qui n'est pas formatée (20170604), ce champ aussi doit être qu format 17/06/04.
Si je comprends bien le formatage de votre commande de agit juste sur la première colonne
Merci pour votre aide
Si je comprends bien le formatage de votre commande de agit juste sur la première colonne
Merci pour votre aide
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
30 juil. 2017 à 09:29
30 juil. 2017 à 09:29
j'avais pas fait attention
$ sed -r 's+([0-9][0-9])([0-9][0-9])([0-9][0-9])+\2/\3/+g' fichier
17/07/01;4575;58;;test;toto;17/06/04;titi;tata;;000;
17/07/02;4576;588;d;test2;toto;17/06/54;titid;tatad;;000;
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
30 juil. 2017 à 14:00
30 juil. 2017 à 14:00
plus court
$ sed -r 's+([0-9]{2})([0-9]{2})([0-9]{2})+\2/\3/+g' fichier
17/07/01;4575;58;;test;toto;17/06/04;titi;tata;;000;
17/07/02;4576;588;d;test2;toto;17/06/54;titid;tatad;;000;
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
>
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
31 juil. 2017 à 11:03
31 juil. 2017 à 11:03
Bonjour bubcek,
merci pour ces retours,
la commande me renvoi l'erreur suivante:
sed: illegal option -- r
Usage: sed [-n] [-u] Script [File ...]
sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
merci pour ces retours,
la commande me renvoi l'erreur suivante:
sed: illegal option -- r
Usage: sed [-n] [-u] Script [File ...]
sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
>
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
31 juil. 2017 à 11:23
31 juil. 2017 à 11:23
Salut,
Sur quel système es-tu ? De l'Unix sûrement ;-\
Essaye :
Sur quel système es-tu ? De l'Unix sûrement ;-\
Essaye :
sed 's+\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)+\2/\3/+g' fichier
diaz1212
Messages postés
6
Date d'inscription
samedi 29 juillet 2017
Statut
Membre
Dernière intervention
1 août 2017
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
Modifié le 31 juil. 2017 à 13:31
Modifié le 31 juil. 2017 à 13:31
Bonjour,
La commande fonctionne, merci bcp
par contre j'essaie de l'appliquer à la ligne suivante et il me reformate les 0000000 par 00/00/0 alors que moi je veux reformater que les dates
fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.0000000;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
resultat:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.00/00/0;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
Merci d'avance
La commande fonctionne, merci bcp
par contre j'essaie de l'appliquer à la ligne suivante et il me reformate les 0000000 par 00/00/0 alors que moi je veux reformater que les dates
fichier:
0560;AAAAAA;20170623;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.0000000;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
resultat:
0560;AAAAAA;17/06/23;BBBBBBBBBBBB;CCCCCCCCCC;FFFFFFFFFF;FFFF;ERTRER;2000;950.00/00/0;0,0;0,0;0,00002;FITYURR;UUU;061;0,01;0,01;0,0;0,0;0,01;1;%;N;O;OK;JJJJ
Merci d'avance