Commande awk-fichier vide

Résolu
rico34 Messages postés 9 Statut Membre -  
 rico34 -
Bonjour,

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
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Est-il possible avec la commande awk de savoir :
    - si le fichier est vide

    Oui.
    awk 'END { if(NR == 0) {print "Fichier vide" }}' fichier

    - si le nombre de champs est correct
    Oui.
    awk -F";" '{ if (NF == 6) {print "Ligne "NR" nombre de champs correct" }}' fichier

    - si le 1e champ recoit bien un numero incrementé (1,2,3,...)
    Je suis pas sûr d'avoir tout compris là. Si le numéro du 1er champ correspond au numéro de ligne ? Si oui, essaie ça :
    awk -F";" ' $1 != NR { print "Ligne "NR" pas OK" }' fichier
    ;-))
    1
  2. rico34
     
    Bonjour,
    Merci pour tes infos. C'est bien tous les controles demandés. Est il possible de les effectuer dans un seul awk.
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    #! /bin/awk -f
    
    BEGIN {
    FS=";"
    }
    $1 != NR {
    print "Ligne "NR" pas OK"
    }
    {
    if (NF == 6) {
    print "Ligne "NR" nombre de champs correct"
    }
    }
    END {
    if(NR == 0) {
    print "Fichier vide"
    }
    }
    
    ;-))
    0
  4. rico34
     
    Ok pour le shell,
    Mais le bloc end ne se traite qu'une fois. Quand il y a plusieurs fichiers vides, il n'y a qu'une impression
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rico34
     
    Bonjour,
    Autant pour moi, Le programme fonctionne correctement.

    Merci beaucoup.
    0