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 :

bash qui vérifie le nombre de |


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Par défaut bash qui vérifie le nombre de |
    Bonjour,

    Je reçois un fichier qui a plusieurs lignes ( variable, je peux recevoir 7 lignes, comme je peux recevoir 10 lignes le lendemain ), et dans chaque ligne on peut avoir maximum 10 pipes |, comme on peut avoir des fichiers contenant 7 pipes et mon bash doit rajouter les 3 pipes.
    exemple.

    file.csv
    toto|||haha||||tata|||
    titi||
    didier||||||||||
    et je dois vérifier chaque ligne si elle contient les 10 pipes, et dans notre exemple, je dois rajouter 8 pipes pour la ligne 2

    file.csv
    toto|||haha||||tata|||
    titi||||||||||
    didier||||||||||
    Merci par avance de votre aide

  2. #2
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'|' '{OFS="|";for(i=NF;i<12;i++) $i="";print}' file.csv

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Autre solution avec grep et wc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [idriss@hp-dv6:~]$ echo "toto|||haha||||tata|||"|grep -o "|"|wc -l
    10
    Cordialement,
    Idriss

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Euh, la solution avec grep et wc ne fonctionne pas comme ça, brute de fonderie, s'il y a plusieurs lignes, il fera le total et non pour chaque ligne...
    Et après, il faut encore faire la complétion, pour avoir le nombre requis de '|' par ligne...
    Autant ne faire que du builtin dans ce cas là

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Ah oui, j'avais pas fait gaffe, après il est toujours possible de faire un truc moche du style (j'ai pas fait les vérif sur le nombre de pipes dans cet exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read ligne; do echo $ligne|grep -o "|"|wc -l; done < fichier
    Mais bon, awk c'est bien mieux dans ce cas

    Idriss

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    Citation Envoyé par disedorgue
    Autant ne faire que du builtin dans ce cas là
    Citation Envoyé par ok.Idriss
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read ligne; do echo $ligne|grep -o "|"|wc -l; done < fichier


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     while read line; do IFS='|' read -a array <<<"$line"; echo "${#array[@]} champ(s)"; done < fichier
    10 champ(s)
    2 champ(s)
    10 champ(s)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/07/2009, 18h13
  2. Fonction qui totalise des nombres mais met 1 au lieu de 1.5
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2006, 16h05
  3. Fonction qui compte le nombre de jours ouvrés par mois
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/07/2006, 15h32
  4. Site qui vérifie les actualisations d'une page web
    Par LFC dans le forum Autres langages pour le Web
    Réponses: 4
    Dernier message: 01/12/2005, 18h47
  5. Petit scrtip bash qui ne marche pas..
    Par Fritzoune dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 15h35

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