IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comparaison des dates dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 51
    Par défaut Comparaison des dates dans un fichier
    bonjour , mon problème , j'ai les information suivante dans un fichier


    Fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    01.01.2022 M PIERRE 20.01.2020
    01.01.2022 M PIERRE 20.01.2022
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2024
    J'ai une date que je souhaite comparer avec la deuxième date de mon fichier si la comparaison est ok j'affiche toute la ligne
    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date_ini="01.01.2013"
     
    cat fichier | awk -v date="$(date -d $(date_ini) +'%d.%m.%d')" -F, '{if (date>$(date -d substr($0,21,10) +'%d.%m.%Y')) {print $0}}'
    je n 'arrive pas à construire cette commande merci de votre aide

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    Par défaut
    Bonjour,

    il faut nous en dire un peu plus, et nous expliquer ton raisonnement.

    pourquoi utilises-tu awk ?
    pourquoi cat ?
    pourquoi convertir date_ini ?
    pourquoi mélanger des syntaxes de langages différents ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Et aussi
    • pourquoi tu utilises la virgule comme séparateur de champs dans des lignes qui ne contiennent pas de virgules?
    • pourquoi, pour comparer, tu utilises l'opérateur ">"? (comparer par exemple "20.01.2020" > "18.07.2023" donnera un résultat assez peu concluant )
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Par défaut
    Tu peux le faire très simplement via une simple ligne de commande en awk, avec ici les lignes à tester dans le fichier fichier.txt
    (le -v permet d'initialiser la variable compare dans le script awk et le $4 correspond à la seconde date, cf. la quatrième colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -v compare=20.01.2023 '$4 == compare  { print $0 }' fichier.txt
    Ce qui renvoie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    yannoo@cyclone ~/Dev/Developpez.Com $ cat fichier.txt
    01.01.2022 M PIERRE 20.01.2020
    01.01.2022 M PIERRE 20.01.2022
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2024
    yannoo@cyclone ~/Dev/Developpez.Com $ awk -v compare=20.01.2023 '$4 == compare  { print $0 }' fichier.txt
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2023

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 342
    Par défaut
    Pour jouer car question incompréhensible et on ne travail pas avec des dates dans ce format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat /tmp/fichier 
    01.01.2022 M PIERRE 20.01.2020
    01.01.2022 M PIERRE 20.01.2022
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 01.01.2023
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2024
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $ date_ini="20230101"
    # on ressort les lignes si la 2ème date est égale à date_ini
    $ sed "s/\(.*\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9]\{4\}\)\)/if [ \4\3\2 -eq $date_ini ] ; then echo \1 ; fi/e;/^$/d" /tmp/fichier 
    01.01.2022 M PIERRE 01.01.2023
    # on ressort les lignes si  la 2ème date est inférieur à date_ini
    $ sed "s/\(.*\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9]\{4\}\)\)/if [ \4\3\2 -lt $date_ini ] ; then echo \1 ; fi/e;/^$/d" /tmp/fichier 
    01.01.2022 M PIERRE 20.01.2020
    01.01.2022 M PIERRE 20.01.2022
    # on ressort les lignes si la 2ème date est supérieur à date_ini
    $ sed "s/\(.*\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9]\{4\}\)\)/if [ \4\3\2 -gt $date_ini ] ; then echo \1 ; fi/e;/^$/d" /tmp/fichier 
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2024

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    on ne travail pas avec des dates dans ce format
    on peut, si on ne cherche qu'à contrôler l'égalité lexicale de deux chaînes : deux chaînes comportent les mêmes caractères dans le même ordre.

    après, si on cherche à déterminer qu'une date est antérieure (ou postérieure) à une autre, en effet, non, on ne travaille pas avec ce format de date, mais avec le format secondes depuis EPOCH pour accomplir une évaluation arithmétique de deux entiers*.

    --
    *on a rarement besoin de plus de précision.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yannoo95170 Voir le message
    Tu peux le faire très simplement via une simple ligne de commande en awk, avec ici les lignes à tester dans le fichier fichier.txt
    (le -v permet d'initialiser la variable compare dans le script awk et le $4 correspond à la seconde date, cf. la quatrième colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -v compare=20.01.2023 '$4 == compare  { print $0 }' fichier.txt
    Mouais. Utiliser awk pour ça...
    Si on en est à donner la solution, on peut le faire encore plus "très simplement" via une encore plus simple ligne de commande grep

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep " 20.01.2023$" fichier.txt
    01.01.2022 M PIERRE 20.01.2023
    01.01.2022 M PIERRE 20.01.2023
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Par défaut
    Effectivement, le grep avec un $ dans la chaîne de caractère recherchée, cf. celle de la date recherchée dans le **DERNIER** champ, c'est mieux

    Le seul truc, c'est que si par le futur une nouvelle colonne est rajoutée : ça ne marche plus ... alors qu'avec un $4 via awk, ça marchera toujours quel que soit le nombre de colonnes qui pourraient potentiellement être rajoutées dans le futur

    => m'enfin bon OK, c'est vrai que ça pourrait aussi s'apparenter à du chipotage

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2016, 00h41
  2. Réponses: 18
    Dernier message: 29/09/2014, 17h42
  3. Comparaison de date dans un fichier excel
    Par elkhansa dans le forum VBScript
    Réponses: 0
    Dernier message: 18/09/2013, 17h45
  4. selection par comparaison des mois dans une date
    Par squal83 dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2009, 10h36
  5. Réponses: 2
    Dernier message: 26/05/2009, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo