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 :

Extraction de chaine de caractere et mélange d'une liste


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut Extraction de chaine de caractere et mélange d'une liste
    Bonjour à tous!!

    je vous préviens, je suis débutant lol, je cherche à faire deux choses:

    Extraire l'adresse IP et le port de ce fichier csv:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    133.13.240.57;90;HTTP;false;"Denver";654;69;"Aug 3 08:57:05"
    149.229.54.4;21;FTP;false;"USA";515;65;"Aug 3 08:57:06"
    149.229.55.4;33;FTP;false;"JP";560;64;"Aug 3 08:57:07"
    149.229.52.6;338;FTP;false;"USA";317;54;"Aug 3 08:57:08"
    Les mettre dans une liste (ligne par ligne) sous la forme:

    Et enfin mélanger toutes les lignes au hasard.

    Pouvez vous m'aider ?

    Merci à tous !
    RedVivi

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par redvivi Voir le message
    Bonjour à tous!!

    je vous préviens, je suis débutant lol, je cherche à faire deux choses:

    Extraire l'adresse IP et le port de ce fichier csv:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    133.13.240.57;90;HTTP;false;"Denver";654;69;"Aug 3 08:57:05"
    149.229.54.4;21;FTP;false;"USA";515;65;"Aug 3 08:57:06"
    149.229.55.4;33;FTP;false;"JP";560;64;"Aug 3 08:57:07"
    149.229.52.6;338;FTP;false;"USA";317;54;"Aug 3 08:57:08"
    Les mettre dans une liste (ligne par ligne) sous la forme:

    Et enfin mélanger toutes les lignes au hasard.

    Pouvez vous m'aider ?

    Merci à tous !
    RedVivi
    Quand tu parles de "liste", tu veux dire "dans un second fichier" ou bien "en mémoire" ???
    En quel langage ? Shell ? Python ? C ?

    Bon, voici déjà le code en shell qui extrait l'IP et le port et qui l'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/sh
    exec 3<fichier.csv
     
    while read lig 0<&3
    do
        ip=`echo $ligne |cut -f1 -d\;`
        port=`echo $ligne |cut -f2 -d\;`
        echo "$ip:$port"
    done
    Le même code en Python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python
    # coding: Latin-1 -*-
     
    file=open("fichier.csv", "r")
    for lig in file:
        tabInfo=lig.split(";")
        print "%s:%s" % (tabInfo[0], tabInfo[1])
    file.close()
    Ensuite tu devrais t'y mettre au lieu de demander des codes aux autres. Voici des tutoriel shell Linux http://linux.developpez.com/cours/ et un tutoriel Python : Apprendre à programmer avec Python 3 par Gérard Swinnen.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut
    Merci pour ta réponse ! J'ai oublié de précisé, c'est en shell/bash. A vrai dire j'ai essayé de m'y mettre moi meme, j'ai réussi à mélanger la liste au hasard mais j'ai eu des problèmes pour l'extraction.

    Cependant, je trouve ta dernière remarque un peu...sèche pour un tel forum. Le lundi matin sans doute

    Merci et ++
    RedVivi

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par redvivi Voir le message
    Merci pour ta réponse ! J'ai oublié de précisé, c'est en shell/bash. A vrai dire j'ai essayé de m'y mettre moi meme, j'ai réussi à mélanger la liste au hasard mais j'ai eu des problèmes pour l'extraction.
    Bon ben pour l'extraction j'espère que tu auras compris l'idée de l'exec associé au read

    Citation Envoyé par redvivi Voir le message
    Cependant, je trouve ta dernière remarque un peu...sèche pour un tel forum. Le lundi matin sans doute
    Ben comment dire... En fait, ce forum n'est pas un fait pour que les gens viennent y demander qu'on leur ponde un code pour ceci ou pour cela. C'est un forum dédié à la résolution des problèmes. Cela signifie que t'es sensé avoir écrit ton code et ne venir ici que parce que t'as un problème sur une portion de ton code (pas bien écrit le cut, oublié un backslash, oublié des guillemets, etc)
    En fait, si on regarde bien la charte, je n'aurais même jamais dû écrire les codes moi-même car un forum sur lequel on donnerait sans retenue des solutions toutes faites "clés en main" serait rapidement stérile. L'échange irait à sens unique, jamais ceux qui demandent ne donneraient en retour, et probablement cela attirerait encore davantage de personnes paresseuses et égoïstes (je parle en général et non pour toi). Par opposition, les habitués du forum sont tenants d'une approche qui profite à tout le monde et où chacun y met du sien. Le demandeur pose un problème, montre qu'il a accompli un travail préliminaire, le formule clairement pour faciliter la tâche du lecteur et participe activement à la solution. Il garde à l'esprit que la solution dégagée dans son cas pourrait resservir à d'autres. De leur côté, ceux qui répondent affinent leurs connaissances et prennent plaisir à côtoyer des professionnels, parfois dans des domaines qu'ils ne maîtrisent pas. Il y a, d'une manière ou d'une autre, un enrichissement mutuel, voire collectif, même s'il n'est pas parfaitement équilibré. Ce qui compte, c'est que chacun y mette du sien... et le demandeur plus que les autres!

    Et donc toute cette réflexion développée ici a été résumée ce matin en une formulation assez succinte et par conséquent un peu... sèche.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut
    C'est le drame car je n'ai pas parfaitement compris l'usage du exec (pourtant j'ai lu le man) ... est-ce que ça sert à ouvrir le fichier pour le reste des commandes ?

    A ce propos, j'ai un problème tout bête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    export http_proxy="`echo $proxy`"
    export http_proxy="$proxy"
    export http_proxy="'$proxy'"
    (oui j'en ai essayé plusieurs)
    Ben ça marche pas top , pourtant un echo me confirme bien que la variable $proxy n'est pas vide.

    J'ai même essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export http_proxy="1.1.1.1:3243"
    Mais après l'exécution du script, si je fais , rien ne m'est renvoyé, signe que la commande n'a pas été prise en compte mais je ne comprend pas pourquoi.

    Merci d'avance !
    RedVivi

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par redvivi Voir le message
    C'est le drame car je n'ai pas parfaitement compris l'usage du exec (pourtant j'ai lu le man) ... est-ce que ça sert à ouvrir le fichier pour le reste des commandes ?
    En fait le exec sert à créer un nouveau buffer IO. Par défaut, dans tout programme quel qu'il soit, tu as automatiquement 3 buffers créés
    - le buffer d'entrée (le clavier) numéroté 0
    - le buffer sortie standard (l'écran) numéroté 1
    - le buffer sortie erreurs (l'écran aussi) numéroté 2
    Avec exec, tu peux en créer 60 autres en entrée (avec <) ou en sortie (avec >).
    Ensuite, si t'as créé un buffer d'entrée, tu peux rediriger toute commande qui lit l'entrée standard sur ce buffer là (le read lig 0<&3 dans mon code) => la commande read lira ses infos non-plus dans le clavier mais dans le buffer 3 (donc le fichier associé). Et si t'as créé un buffer de sortie, tu peux rediriger toute commande qui affiche sur la sortie standard sur ce buffer là (ce serait du style echo truc 1>&4 par exemple) => la commande echo écrira ses infos non-plus à l'écran mais dans le buffer 4 (donc dans le fichier associé).

    Citation Envoyé par redvivi Voir le message
    A ce propos, j'ai un problème tout bête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    export http_proxy="`echo $proxy`"
    export http_proxy="$proxy"
    export http_proxy="'$proxy'"
    (oui j'en ai essayé plusieurs)
    Ben ça marche pas top , pourtant un echo me confirme bien que la variable $proxy n'est pas vide.

    J'ai même essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export http_proxy="1.1.1.1:3243"
    Mais après l'exécution du script, si je fais , rien ne m'est renvoyé, signe que la commande n'a pas été prise en compte mais je ne comprend pas pourquoi.
    Ben parce que toute variable créée dans un script est perdue à la fin de celui-ci et c'est incontournable (sauf si t'écris ta variable dans un fichier). En fait, quand tu lances un shell (ou tout autre programme), ton shell courant duplique son code et c'est le fils qui se charge d'exécuter le programme pendant que le père (le shell courant) attend la fin de l'exécution. Et comme les environnements sont indépendants, les variables créées dans le fils sont perdues à la fin du fils.
    Le "export" n'a qu'un rôle très simple: faire en sorte qu'une variable soit connue par les fils futurs. Donc si dans ton shell courant tu écris "export var=toto" ben tous les shells qui seront lancés à partir de là connaitront "var". Et ce mécanisme est aussi possible pour un script => si dans un script tu écris "export var=toto" tous les shells lancés à partir du script connaitront la variable var. Mais cela ne va que dans le sens descendant (une variable exportée à partir d'un niveau sera connue de tous les fils issus de ce niveau) et jamais dans le sens remontant (une variable modifiée dans un niveau ne remonte jamais vers son père).

    Pour tester ce mécanisme, tu peux écrire un script "xxx.sh" qui contient le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    echo "http_var=[$http_var]"
    Puis tu écris deux script
    base1.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    http_var="127.0.0.1"
    ./xxx.sh
    base2.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    export http_var="127.0.0.1"
    ./xxx.sh
    Si tu lances "base1.sh" tu n'auras rien, si tu lances "base2.sh" tu auras en final 127.0.0.1 à l'écran (car http_var sera connu du script "xxx.sh")

    Mais t'auras beau faire ce que tu veux, tu ne pourras pas (de façon simple) récupérer la variable http_var dans ton environnement de travail.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2012, 17h41
  2. Réponses: 1
    Dernier message: 08/09/2007, 17h12
  3. Verifier si une chaine de caractere est situe dans une chaine de caractere
    Par gregounnet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 15h31
  4. probleme extraction de chaine de caracteres
    Par nivose110 dans le forum C
    Réponses: 13
    Dernier message: 11/07/2006, 15h44
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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