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 :

Script ou Commande shell UNIX


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut Script ou Commande shell UNIX
    Bonjour à tous et à toutes

    Je voudrais avoir un petit script qui permet de me lire un fichier "csv" (plusieurs lignes et colonnes séparées par des ';') puis remplacer les valeurs (nombres) d'une colonne (connue) par des mots (je ne peux pas l'appliquer à toutes les colonnes séparément car il y a des colonnes qui contiennent des valeurs identiques), puis de supprimer les lignes qui restent (celles qui n'ont pas de colonnes qui ont étaient remplacées).....

    Merci de me répondre vite.

  2. #2
    Expert confirmé 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 : 48
    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
    Par défaut
    1;2;3;4;1;2;3;4 => 1;2;a;4;1;2;3;4 ????

  3. #3
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Merci de votre réponse. Je vous explique un peu. Moi j'ai le couple (a=1) que j'applique sur l'exemple suivant

    1;2;3;4;5;6 a;2;3;4;5;6
    2;2;3;4;7;6 ==> a;2;3;4;7;6
    1;4;5;7;8;9


    sinon je supprime la ligne et j'élimine le vide

  4. #4
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Quelqu'un pour m'aider ?

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas tres clair pour moi,

    Peux tu donner 4-5 lignes d'un fichier avec a coté le resultat de l'action souhaitée ( pas de changement, tel changement, ligne supprimée car ... )

    ?

  6. #6
    Membre chevronné
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Par défaut
    Désolée mais je ne comprend pas vraiment ta question . Si tu cherche à remplacer des caractères dans un fichier tu peux utiliser sed (je te conseille de lire la doc parce que la syntaxe est un petit peu compliquée) ou si sed ne fonctionne pas awk , qui est l'outil de lecture/ecriture dans un fichier.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    OK merci, c'est ce que j'ai trouvé aussi sur le net, il faut utiliser awk apparemment

  8. #8
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    INPUT:

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

    traitement1: remplacer '1' par 'a'

    a;2;3;4;5;6
    (ligne vide (supprimée) car le '2' n'a pas de signification)
    a;2;3;4;7;6

    traitement2= OUTPUT: éliminer les lignes vides

    a;2;3;4;5;6
    a;2;3;4;7;6

  9. #9
    Expert confirmé 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 : 48
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat t
    1;2;3;4;5;6
    2;2;3;4;7;6
    1;4;5;7;8;9 
    $ sed '/1/!d;s/1/a/' t > resultat
    $ cat resultat 
    a;2;3;4;5;6
    a;4;5;7;8;9 
    $
    conrétement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ sed '/1/!d;s/1/a/' t > resultat
    la premiere commande /1/!d = si on trouve 1 sur la ligne on efface pas
    la dexième command s/1/a/ = substituer 1 par a (sans conditions)
    le ";" sépare les deux sous-commandes.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par frp31 Voir le message
    la premiere commande /1/!d = si on trouve 1 sur la ligne on efface pas
    J'aurai plutôt dit le contraire, si on ne trouve pas "1" (la négation étant exprimée par le "!") sur la ligne on efface (avec la commande "d" (delete))

    Perso j'aurai plus vu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^1\b/{s//a/p}' fichier
    -n
    Impression sur la sortie standard sur demande (voir le flag "p" plus loin)

    /^1\b/
    Si la ligne commence (^) par "1", sans aucun caractères alphanumériques derrière (\b exprime une limite de mot).

    {
    Regroupement de commandes à appliquer

    s//a/p
    On substitue la valeur du motif déjà cité (autrement dit le "1") par un "a", et on imprime sur la sortie standard avec le flag "p".

    }
    Fin du regroupement de commandes


  11. #11
    Expert confirmé 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 : 48
    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
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,


    J'aurai plutôt dit le contraire, si on ne trouve pas "1" (la négation étant exprimée par le "!") sur la ligne on efface (avec la commande "d" (delete))

    Perso j'aurai plus vu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^1\b/{s//a/p}' fichier
    -n
    Impression sur la sortie standard sur demande (voir le flag "p" plus loin)

    /^1\b/
    Si la ligne commence (^) par "1", sans aucun caractères alphanumériques derrière (\b exprime une limite de mot).

    {
    Regroupement de commandes à appliquer

    s//a/p
    On substitue la valeur du motif déjà cité (autrement dit le "1") par un "a", et on imprime sur la sortie standard avec le flag "p".

    }
    Fin du regroupement de commandes

    bien vu

  12. #12
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut exemple avec awk ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "a;1;2;3;4" |awk -F";" 'BEGIN{ OFS=";" }  $1 == "a" { $1 = "toto" ; print }'
    Je ne sais pas si c'est plus efficace que le sed ...

  13. #13
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Merci pour vos réponses, j'y suis arrivé

    Maintenant je veux savoir s'il y a un moyen de convertir le fichier résultant en décimal, je vous explique...j'ai de grand nombre en sortie dans mon fichier alors il me les affiche du genre 2,14E+11 y a t il un moyen de le convertir en décimal enfin il l'est déjà c à d l'afficher sur plusieurs positions 214 000 000 000 ????????

  14. #14
    Membre averti
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Merci de me répondre SVP.

    j'ai aussi une autre question dans le même contexte: Je voudrais supprimer des lignes selon la valeur de la première colonne,

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read jd  (jour début)    supposon que $jd=15
    read jf (jour fin)           //           //   $jf=18
    on a le fichier suivant en INPUT:

    14/01/2012;a;b;c;d
    15/01/2012;a;b;c;d 
    16/01/2012;a;b;c;d
    17/01/2012;a;b;c;d
    18/01/2012;a;b;c;d
    19/01/2012;a;b;c;d
    20//01/2012;a;b;c;d
    je voudrais avoir en OUTPUT:

    15/01/2012;a;b;c;d 
    16/01/2012;a;b;c;d
    17/01/2012;a;b;c;d
    18/01/2012;a;b;c;d
    toutes les autres lignes seront supprimées. Merci de me répondre, je vous serai reconnaissant

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Re-

    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
    $ cat plop 
    14/01/2012;a;b;c;d
    15/01/2012;a;b;c;d
    16/01/2012;a;b;c;d
    17/01/2012;a;b;c;d
    18/01/2012;a;b;c;d
    19/01/2012;a;b;c;d
    20//01/2012;a;b;c;d
     
    $ jd=15;jf=18
     
    $ sed -n "/^${jd}/,/^${jf}/p" plop 
    15/01/2012;a;b;c;d
    16/01/2012;a;b;c;d
    17/01/2012;a;b;c;d
    18/01/2012;a;b;c;d
     
    $

Discussions similaires

  1. commande shell unix
    Par maiil dans le forum Linux
    Réponses: 1
    Dernier message: 26/03/2010, 13h13
  2. Passage de Shell Script a C sous Unix
    Par sam.fet dans le forum Linux
    Réponses: 5
    Dernier message: 29/08/2006, 18h12
  3. Execution d'une commande Shell Unix
    Par boubakary dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/06/2006, 20h36
  4. Script SHELL/UNIX avec mysql
    Par HacHHacH dans le forum Linux
    Réponses: 6
    Dernier message: 06/04/2006, 23h48
  5. [ASE 12.5.1] Execution de scripts / commandes shell
    Par zayro dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 24/02/2006, 10h47

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