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 :

compter un caractere precis ligne par ligne puis retirer ces lignes


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Février 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut compter un caractere precis ligne par ligne puis retirer ces lignes
    Bonjour
    Voici j'ai un soucis
    j'ai un fichier avec 150 lignes
    dans un premier temps on m'a demandé de compter ligne par ligne le nombre de fois que le caractère "c" et "C" apparaissait
    pour cela j'ai effectué cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    awk 'BEGIN {FS="c"}{print NF-1}' nomfichier
    awk 'BEGIN {FS="C"}{print NF-1}' nomfichier
    afin d'avoir le nombre total de caractères C et c.
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {FS="C" || FS="c"}{print NF-1}' nomfichier
    afin de n'avoir pas à répéter la ligne mais cela n'a pas fonctionné.

    donc je cherche maintenant à additionner ligne par ligne afin d'avoir le nombre total et ensuite si ce chiffre est supérieur à un nombre (ici 25) retirer la ligne
    un grand merci
    Moretti Cedric

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    bjr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     for i in $(sed 's/[^Cc]//g' $fichier) ; do 
    sed -i '/ccccccccccccccccccccccccc.*/d' $fichier ; done
    bien sur la variable $fichier contient le chemin et le nom du fichier à éditer.

    nota : j'ai mis "ccccccccccccccccccccccccc.*" uniquement pour l'exemple il y a une syntaxe sed pour dire 'c 25* de suite' bien sur mais je te laisse chercher...

    mais c'est pour comprendre la syntaxe :
    pour tout i dans [aurtre caractere que c ou C remplacé par rien] ; faire chercher '25c*' et delete la ligne ; fin_faire

    je résume :
    il te reste à ajouter la syntaxe propre pour 25c et bien sur à la remplacer par "25c ou C" après
    et ton effacement de toute ligne contenant 25C sera fini


    bon aller je suis sympa je donne la 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
    francois@francois-laptop:/tmp$ cat toto
    fdjlhfdghdfkghdfkjghdfkjhckgjfkhgkdfjghkfghkc
    kgjfklgdflgdflghd
    ccc
    kdslfjdsfcdsjfdlsfjslc
     
    ccccccccccCCCC
    francois@francois-laptop:/tmp$ echo ccccccccccCCCCcccccccccccCCCCCCCCCCCCCC >> toto 
    francois@francois-laptop:/tmp$
    francois@francois-laptop:/tmp$ for i in $(sed 's/[^Cc]//g' toto) ; do sed -i '/[cC]\{25\}/d' toto ; done 
    francois@francois-laptop:/tmp$ cat toto
    fdjlhfdghdfkghdfkjghdfkjhckgjfkhgkdfjghkfghkc
    kgjfklgdflgdflghd
    ccc
    kdslfjdsfcdsjfdlsfjslc
     
    ccccccccccCCCC
    francois@francois-laptop:/tmp$
    comme ça seules les chaines de "c ou C" >= à 25 de suite sont effacées
    enfin un conseil :

    parce que je ne vois pas pourquoi tu veux garder le comptage des caractères non "c ou C", j'imagine que tu n'en a pas besoin au quel cas tu peux réduire le code à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/[cC]\{25\}/d' fichier
    et enfin si tu veux changer le nombre de caractères "c ou C" dont il faut effacer les lignes pour utiliser dans un script par exemple tu peux utiliser une variable comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/[cC]\{'${TA_VARIABLE}'\}/d' ${nom_fichier}

  3. #3
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Pour donner le nombre de c ou C dans le fichier file_in:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '[Cc]' '{n+=NF-1} END {print n}' file_in
    Pour retirer les lignes qui ont 25 (ou plus) c ou C du fichier file_in (résultat dans file_out):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '[Cc]' 'NF-1 <= 25' file_in > file_out
    Edit: fautes de français

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Février 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Merci de vos réponses
    je fais tout cela demain, je vous tiendrai au courant....

    shell powerrrrrrrrrr
    et linux power

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Février 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    ca marche
    merci à
    jmelyn
    &
    frp31

    pour leurs aide

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

Discussions similaires

  1. [XL-2013] organiser les cellules par 3 puis passage à la ligne
    Par samsam007 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2014, 09h44
  2. Comment puis retirer les lignes doubleées
    Par pierrot10 dans le forum Excel
    Réponses: 1
    Dernier message: 01/01/2014, 21h45
  3. Réponses: 13
    Dernier message: 30/06/2011, 18h33
  4. Réponses: 34
    Dernier message: 08/03/2007, 15h51
  5. Réponses: 6
    Dernier message: 28/07/2006, 19h04

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