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

Applications et environnements graphiques Discussion :

AWK : traitement de fichier


Sujet :

Applications et environnements graphiques

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut AWK : traitement de fichier
    Bonjour,

    Je travaille sous Unix SunOS 5.8, j'ai un fichier de plusieurs lignes (ci-dessous un extrait), je veux comparer le champ rouge de la ligne 1 avec le champ rouge de la ligne 2, et de même pour la ligne 2 avec la ligne 3, ainsi de suite ...

    Centenu du fichier :

    Ligne 1 : RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083
    Ligne 2 : RED_120607V083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5
    ....
    ....

    Merci

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Quelles comparaisons ? égalité ou supérieure/inférieure ?
    Grave urgent !!!

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ligne 1 : RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083

    Ligne 2 : RED_120607X083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5

    Je voudrai en fait afficher pour chaque deux lignes successives, si le [champ2-champ1]>=2heures

    Car les champs en rouge sont des heures : 03h39 et 23h16.

    Merci.

  4. #4
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Travaillé sur les heures en awk ...arg
    Je te conseillerai plutot de t'orienter vers le langage Perl, developpé pour éviter d'avoir des usines à gaz sous awk
    Grave urgent !!!

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Traitement des champs heures
    et perl sous unix, je sais pas encore par quoi commencer.
    Je dois donner le nom du fichier en entrée du script perl, comparer les champs des lignes, et afficher le résultat...

    Je verrai.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Je ne suis pas sûr d'avoir compris, mais voilà quelque chose en awk qui le fait peut-être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    nawk -F';' '
    # hh:mm -> mn
    function m(hm)
    {
      split(hm,s,":");
      return((s[1]*60)+s[2]);
    }
    function process(old,new)
    {
      oldm=m(old);
      newm=m(new);
      if(newm<oldm) newm+=(24*60);
      if((newm-oldm)>120)
      {
        printf("\n%s\n%s\n",r0,r1);
      }
    }
    BEGIN {
      old=-1;
    }
    {
      new=$5
      r1=$0
      if(old!=-1)
      {
        process(old,new);
      }
      r0=$0
      old=new;
    }
    '
    ɹǝsn *sıɹɐlos*

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Comment puis-je utiliser les deux fonctions, pour détecter si la différence entre le champ1 (champ rouge ligne1) et le champ2 (champ rouge ligne2) est >=2h.

    J'ai un fichier qui contient :

    (ligne 1) RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083

    (ligne 2) RED_120607X083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5

    ....
    ....

    Je veux afficher pour chaque deux lignes successives, si le [champ2-champ1]>=2heures

    Càd : si (23:16 - 03:39)>=2h, ainsi de suite pour la ligne2 et la ligne3.

    Merci.

  8. #8
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    [QUOTE=zeus2005]
    Càd : si (23:16 - 03:39)>=2h, ainsi de suite pour la ligne2 et la ligne3.
    QUOTE]


    Pour fonctionner, cela doit intégrer aussi le changement de jour.
    Même si ce n'est pas la solution, en cherchant un petit peu tu as de quoi terminer ton exercice

    http://lea-linux.org/cached/index/Dev-awk.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    awk -F";" '
    {
    	if (NR == 1) {
    		StartTimeMinutes=(60*substr($7,1,2))+substr($7,4,2)
    		StartTime=$7
    		StartDay=substr($6,1,2)
    		next
    	}
     
    	EndTimeMinutes=(60*substr($5,1,2))+substr($5,4,2)
    	EndTime=$5
    	EndDay=substr($4,1,2)
     
    	Delta=(((StartDay - EndDay)*24*60) + StartTimeMinutes) - EndTimeMinutes
    	if (Delta > 120) {
    		print "StartTime : le "StartDay" à "StartTime" / EndTime : le ("EndDay") à "EndTime
    	}
    	StartTimeMinutes=(60*substr($7,1,2))+substr($7,4,2)
    	StartTime=$7
    	StartDay=substr($6,1,2)
    } '  test.txt
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par zeus2005
    Bonjour,

    Merci pour la réponse.

    Comment puis-je utiliser les deux fonctions, pour détecter si la différence entre le champ1 (champ rouge ligne1) et le champ2 (champ rouge ligne2) est >=2h.
    Ma réponse est un script awk complet qui utilise ces fonctions et répond à (ce que je comprend de) ton problème.

    Essaie le en lui passant le nom de ton fichier en argument (comme le fait celui de BlaireauOne) ou en redirigeant ton fichier vers le script.
    ɹǝsn *sıɹɐlos*

Discussions similaires

  1. Traitement de fichiers Unix sous Windows avec AWK
    Par michel baily dans le forum Shell et commandes POSIX
    Réponses: 1
    Dernier message: 06/10/2011, 10h45
  2. traitement de fichier avec AWK
    Par Morel26 dans le forum Unix
    Réponses: 3
    Dernier message: 11/09/2011, 23h06
  3. Probleme de retour chariot (Traitement du fichier avec AWK)
    Par abb.wafa dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 21/01/2010, 15h05
  4. Script AWK et traitement de fichier
    Par pcsystemd dans le forum Administration système
    Réponses: 10
    Dernier message: 12/06/2009, 17h18
  5. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40

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