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

Linux Discussion :

commande awk-fichier vide


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 39
    Points
    39
    Par défaut commande awk-fichier vide
    Les fichiers possèdent 6 champs séparés par le séparateur ";". Le 1e champ contient un numéro de ligne de 1 à n (nombre d'enregistrements). Je suis dans une boucle avec une variable i recevant le nom du fichier
    for i in a b c
    ...

    Est-il possible avec la commande awk de savoir :
    - si le fichier est vide
    - si le nombre de champs est correct
    - si le 1e champ recoit bien un numero incrementé (1,2,3,...)
    Si ce n'est pas le cas, il y a message d'erreur.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rico3434 Voir le message
    Les fichiers possèdent 6 champs séparés par le séparateur ";". Le 1e champ contient un numéro de ligne de 1 à n (nombre d'enregistrements). Je suis dans une boucle avec une variable i recevant le nom du fichier
    for i in a b c
    ...

    Est-il possible avec la commande awk de savoir :
    - si le fichier est vide
    - si le nombre de champs est correct
    - si le 1e champ recoit bien un numero incrementé (1,2,3,...)
    Si ce n'est pas le cas, il y a message d'erreur.

    Merci
    C'est tout à fait possible de faire tout ça avec awk. La variable "NF" contient le nombre de champs. La variable "NR" contient le numéro de la ligne en cours (qui devrait être égal à celui de ton 1er champ $1). Et avec le bloc "END" qui s'exécute en fin de traitement, tu peux tester si "NR" vaut 0 ce qui veut dire que le fichier est vide. Pour ce dernier truc tu peux aussi dans ton shell tester avec "test ! -s" qui te renvoie "vrai" si le fichier est vide.

  3. #3
    Nouveau membre du Club
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 39
    Points
    39
    Par défaut
    Merci pour tes infos.
    Peux tu me donner un petit exemple qui pourrait me faire avancer.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rico3434 Voir le message
    Merci pour tes infos.
    Peux tu me donner un petit exemple qui pourrait me faire avancer.
    Suis pas sûr de mon coup car j'ai pas d'Unix sous la main (et je tape en live). Donc voici un truc qui devrait à peu près te satisfaire

    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
    #!/bin/sh
    for file in a b c
    do
        # Test fichier vide via shell
        if test ! -s "$file"
        then
              echo "$file vide - abort"
              continue
        fi
     
        # Test si fichier vide via awk
        awk -F\; 'END {if (NR == 0) exit(1)}' $file
        if test $? -ne 0
        then
              echo "$file vide - abort"
              continue
        fi
     
        # Test si chaque ligne contient bien 6 champs
        awk -F\; '{if (NF < 6) exit(1)}' $file
        if test $? -ne 0
        then
              echo "$file n'a pas 6 champs à toutes les lignes - abort"
              continue
        fi
     
        # Test si le premier champ est bien un n° de ligne
        awk -F\; '{if (NR != $1) exit(1)}' $file
        if test $? -ne 0
        then
              echo "$file n'a pas son n° de ligne en premier champ - abort"
              continue
        fi
    done
    Bon, suis pas vraiment certain que "NR" soit égal au n° de ligne en cours en début de traitement awk. Il peut y avoir un décalage de 1 si NR commence à 0 donc ça se teste. C'est juste pour te donner une idée. Ensuite je te conseillerais de télécharger un tuto awk comme celui-là http://www.lea-linux.org/cached/index/Dev-awk.html

Discussions similaires

  1. fichier vide après command cp (unix)
    Par leo77 dans le forum C
    Réponses: 6
    Dernier message: 17/04/2009, 14h57
  2. commande awk + sortie en deux fichiers
    Par nina2007 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/08/2008, 15h54
  3. Commande AWK ou SED pour modification données dans fichier
    Par desbrandesq dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 17h56
  4. La commande sed renvoie un fichier vide
    Par aaronw dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/09/2006, 11h46
  5. Recheche commande AWK pour afficher une liste de fichiers
    Par Krispy dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 21/07/2006, 11h36

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