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 :

Awk


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut Awk
    bonjour,
    donc voila ,j'aimerai obtenir des lignes specifiques d'un fichier avec awk,avec une boucle for:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in `cat fichier`
    do
    echo `awk  '{print $i}' $fic` >>$2
    done
    sachant que fichier contient:
    3 5

    et fic:
    5

    21 12 2003 2 10

    22 12 2003 1 11

    31 12 2003 -3 0

    1 1 2004 -7 -1

    2 1 2004 -10 -5


    mais il m'affiche 2 fois le fichier fic au lieu de la 3eme et la 5eme ligne verticale.
    comment je peux resoudre cela.
    merci[/code]

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    Que dois tu faire exactement ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    je veux obtenir la 3eme ligne et la 5 eme ligne verticale:

    2003
    2003
    2003
    2004
    2004

    10
    11
    0
    -1
    -5

    sachant qu'on a 3 5,en faisant `cat fichier`

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    fait un man awk, la passation de parametre a awk ne se fait pas comme tu le pense ($i)
    :
    awk -v "vaar=$i" '............' dans ton cas

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 64
    Par défaut
    ta raison
    j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in `cat fichier`
    do
    echo `awk -v "var=$i" '{print $var}' $fic` >>$2
    done
    et ca marche
    thanks

  6. #6
    Membre averti
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut Awk
    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 ...

    Contenu 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
    ....
    ....

    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.

  7. #7
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    cela pourrait peut-être t'aider à trouver une solution ...
    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
    32
    33
    34
    35
    36
    37
     
    #!/bin/sh
     
    i=0;
     
    while read line
    do
            if [ "$line" == "" ]
            then
                    echo -e "ligne vide"
            else
                    heure=$(echo $line |cut -d ';' -f5)
                    i=$(expr $i + 1);
            fi
     
     
            if [ $i -ge 2 ]
            then
                    h1=$(echo $heure |cut -d ':' -f1);
                    h2=$(echo $prev |cut -d ':' -f1);
     
                    m1=$(echo $heure |cut -d ':' -f2);
                    m2=$(echo $prev |cut -d ':' -f2);
     
                    diffHeure=$(expr $h1 - $h2);
                    diffMin=$(expr $m1 - $m2);
                    [ $diffHeure -lt 0 ] && diffHeure=$(expr $diffHeure + 24)
     
                    [ $diffMin -lt 0 ] && diffMin=$(expr $diffMin + 60) && diffHeure=$(expr $diffHeure - 1)
     
                    [ $diffHeure -gt 2 ] && echo -e "$h1:$m1 et $h2:$m2 ont un ecart de + de 2h"
     
            fi
     
            prev=$heure;
     
    done <fic

  8. #8
    Invité de passage
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Par défaut lignes successives
    Bonjour,

    Je cherche à récupérer les paires des lignes numérotées qui contiennent une expression régulière s'étalant sur les deux lignes.

    par exemple comment extraire les deux lignes en rouge du fichier suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    060660        END-EXEC.                                                 KPERL0
    060670        GO TO F80-OK.                                             KPERL0
    060680 F80-KB2S-W.                                                      KPERL0
    060690       MOVE      "W "           TO  V-INFO-TYPE.                  KPERL0
    060700       MOVE  "KPER.PIECEJUSTIFICATIVE    " TO V-INFO-CODE.        KPERL0
    060710       EXEC SQL                                                   KPERL0
    060720       INSERT                                                     KPERL0
    060730                      INTO  KPER.PIECEJUSTIFICATIVE               KPERL0
    060740                  ( NOPCE ,                                       KPERL0
    060750                    NOORPER ,                                     KPERL0
    060760                    CODNATPJ ,                                    KPERL0
    060770                    DATDEBEFFPJ ,                                 KPERL0
    060780                    DATFINEFFPJ ,                                 KPERL0
    Cordialement,
    un débutant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Awk et variables
    Par Fabien Celaia dans le forum Linux
    Réponses: 2
    Dernier message: 15/06/2004, 11h31
  2. Problème sur une cmd avec AWK
    Par OrangeBud dans le forum Linux
    Réponses: 3
    Dernier message: 02/06/2004, 10h51
  3. Awk - Traiter chaque ligne du fichier passwd
    Par tony montana dans le forum Linux
    Réponses: 7
    Dernier message: 25/03/2004, 09h40
  4. Tableau en paramètre - Shell et Awk
    Par gc243 dans le forum Linux
    Réponses: 7
    Dernier message: 10/12/2003, 13h32
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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