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 :

nombre de caractères dans un fichier


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut nombre de caractères dans un fichier
    Bonjour,

    Je souhaite utiliser la commande awk sur un fichier csv et savoir si il n'y a pas un champ en moins ou en plus sur un enregistrement.
    Le séparateur est ";"
    Je souhaite connaitre le nombre de caractères ";" et diviser par le nombre de lignes.
    La méthode est-elle correcte.

    Merci pour vos infos.

  2. #2
    Membre émérite 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
    Par défaut
    Tu peux utiliser les 2 variables réservées de awk : NF et NR
    http://www.shellunix.com/awk.html


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    awk -F";" -v NbChampValide=35 '
    {
    	if (NF != NbChampValide) {
    		print "*** sur Record "NR" : "NF" champs presents (valide "NbChampValide") !!!" | "cat 1>&2"
    	}
    } '  test.txt

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    awk -F';' '{
      n[NF-1]++;
      max=NF-1>max?NF-1:max} 
    END{
      for (i=0;i<=max;i++)
        if (n[i])
          printf "%s lignes avec %d caractères ;\n",n[i],i
    }' x
    3 lignes avec 3 caractères ;
    1 lignes avec 4 caractères ;
    1 lignes avec 10 caractères ;

  4. #4
    Membre confirmé
    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
    Par défaut
    Encore un grand merci pour vos solutions.

  5. #5
    Membre confirmé
    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
    Par défaut
    Une autre question sur ce shell. Je souhaite ajouter un numéro de ligne dans le fichier test.txt

    fichier initial
    1;2;3;4;5;6;7;8;9
    1;2;3;4;5;6;7;8;9
    1;2;3;4;5;6;7;8;9

    fichier final
    00001;1;2;3;4;5;6;7;8;9
    00002;1;2;3;4;5;6;7;8;9
    00003;1;2;3;4;5;6;7;8;9

    shell controlant le nombre de champs par enregistrement.
    awk -F";" -v NbChampValide=9 '
    {
    if (NF != NbChampValide) {
    print "*** sur Record "NR" : "NF" champs presents (valide "NbChampValide") !!!" | "cat 1>&2"
    }
    } ' test.txt

    Ce shell ajoute le numéro de ligne mais pas le point virgule. Est-il possible de l'ajouter avec le shell suivant.

    awk
    {
    printf ("%05.05d%s\n",NR, $0)
    } ' test.txt

    Est-il possible de concaténer ces deux shells ?

    merci

  6. #6
    Membre confirmé
    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
    Par défaut
    J'ai résolu mon problème d'ajout du séparateur.


    awk
    {
    printf ("%05.05d;%s\n",NR, $0)
    } ' test.txt>test2.txt

    awk -F";" -v NbChampValide=10 '
    {
    if (NF != NbChampValide) {
    print "*** sur Record "NR" : "NF" champs presents (valide "NbChampValide") !!!" | "cat 1>&2"
    }
    } ' test2.txt


    Et j'obtiens bien mon fichier final
    00001;1;2;3;4;5;6;7;8;9
    00002;1;2;3;4;5;6;7;8;9
    00003;1;2;3;4;5;6;7;8;9

    Est il possible de lancer 1 seule fois la commande awk car le temps de traitement sera diminué.

    Merci

Discussions similaires

  1. Compter le nombre de caractères dans le titre d'un fichier
    Par jerem7286 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 02/11/2013, 14h47
  2. Réponses: 15
    Dernier message: 26/04/2009, 16h08
  3. Réponses: 10
    Dernier message: 09/02/2008, 11h40
  4. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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