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 :

Script de traitement de fichier


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut Script de traitement de fichier
    Bonjour

    Voila je dois réaliser un script shell me permettant de lire un fichier, d'extraire des ligne et de copier ses lignes dans un fichier en fonction du premier champs.
    Ce fichier se compose de plusieurs lignes.
    Chaque ligne est constituée de plusieurs champs.
    Le première champs correspond à des numéros client codé sur 4 caractère (un code client peut apparaitre plusieurs fois dans le fichier)
    Donc il faut que je crée un fichier pour chaque client contenant les infos du client (les autres champs du fichier)

    Voila je suis vraiment perdu là, je sais pas si vous avez un lien pour apprendre à faire n script shell je veux bien.

    Vous faites comment pour lire une ligne d'un fichier, et pour faire un boucle "tant que je n'ai pas fini de lire le fichier faire....."

    Voila, j'espère que vous pourrez m'aider

    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    des fichiers style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1111:blabla:patati:et:patata
    donc si je cromprend bien ?

    tu peux faire ça facilement avec une boucle :

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in `cat fichier | cut -d: -f1` ; do grep $i fichier | cut -d: -f2-5 >> client.$i ; done
    ainsi tu obtiens pour chaque code à 4 caractere de la premiere colone identiques un fichier client.lecode contenant toutes les lignes qui commence par ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    dev_test_5/etc/namedb>cd /tmp
    dev_test_5/tmp>cat > fichier
    aaa:aaaaa
    rrrr:rrrreer
    tttt:ertertt
    dev_test_5/tmp>for i in `cat fichier | cut -d: -f1` ; do  grep $i fichier | cut -d: -f2-5 >> client.$i ; done
    dev_test_5/tmp>ll client*
    -rw-rw-rw-   1 root     system         6 Jan 10 12:33 client.aaa
    -rw-rw-rw-   1 root     system         8 Jan 10 12:33 client.rrrr
    -rw-rw-rw-   1 root     system         8 Jan 10 12:33 client.tttt
    dev_test_5/tmp>cat client.rrrr
    rrrreer
    dev_test_5/tmp>rm client* fichier
    dev_test_5/tmp>
    pour apprendre à faire des shellscript c'est simple :
    1-lire le man page de bash(ou du shell choisi)
    2-toutes commande valide dans le shell est valide dans un script
    3-tester et s'amuser
    4-il y a souvent 1000 façons de faire la même chose....mais il y en a tjrs une qui est plus facile ou plus souple ou plus rapide....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in `cat fichier | cut -d: -f1` ; do grep $i fichier | cut -d: -f2-5 >> client.$i ; done
    une explication sur ce code :

    pour i dans lire fichier coupé au : premier morceau codeclient seul ; faire recerche i dans fichier coupé au : morceau 2 à 5contenus des colones 2 à 5 redirige dans client.ii=codeclient ; findeboucle
    Comité de lutte contre le langage SMS sur les forums
    Veuillez écrire dans un langage compréhensible par les humains, merci.

  3. #3
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    Salut,
    alors voilà 2 liens :
    http://linux.developpez.com/faq/?page=Shells
    http://lea-linux.org/cached/index/Admin-admin_env-shell.html
    quand tu auras parcouru ces deux pages tu auras pu repérer quelques trucs qui pourront te servir, mais si tu as du mal à t'en servir tu peux poser des questions précises ici pour qu'on t'aide à les résoudre...
    cordialement,
    jula.
    Promis, avant j'ai cherché sur Google!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Vraiment merci beaucoup c'est vraiment très gentil de votre part

    Ben en fait ile carctère séparateur c'est un espace.

    De mon coté j'ai trouvé ca
    ligne=`head --lines=1 "nom du fichier" |cut -c 1,2,3,4`

    Ca à l'air de marcher, j'extrais bien le code de la première ligne.

    Maintenant il me "suffit" de faire un boucle en faisant varier le numéro de ligne et des qu'il trouve le même code client op il le copie de le même fichier.

    En tout cas je vais prendre soin de lire ce que vous m'avez poster, c'est vraiment gentil de m'aider. (Vraiment du mal car pas l'habitude, je suis plus dans le perl normalement, avec le bash il faut mettre tout sur la même ligne )

  5. #5
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    pas forcement non ... tu peux separer les commandes aussi...
    Comité de lutte contre le langage SMS sur les forums
    Veuillez écrire dans un langage compréhensible par les humains, merci.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    C'est encore moi

    Non j'ai vraiment trop du mal avec les boucle

    Je voudrai utiliser la boucle while pour dire "tant que le fichier n'est pas fini faire ....." pour poarcourir toutes les lignes du fichier.

    Merci d'avance

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Bon voila petit à petit j'y arrive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in `cat fichier | cut -c 1,2,3,4`
    do
    	grep $i fichier | paste >> client.$i
    done
    Par contre j'ai une boucle infini

    Comprend pas pq

    Si vous avez une idée je veux bien

    Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Merci pour la mise en page

    Bon pas beaucup de réponse

    Enfin je crois que j'ai compris pq j'ai une boucle infini, "i" reçoit comme argument la valeur du numéro client. Mais voila ce numéro client est de l'ordre de 7000 donc doit faire 7000 fois la même chose

    Je crois donc que c'est pas la bonne boucle snif si vous avez une idée je veux bien je suis bloqué

    Sinon vous savez pas comment on peut acceder à tel ou tel numéro de ligne? j'arrive pas à trouver
    ex: je veux extraire la 15 ligne d'un fichier texte.

    S'il vous plait si vous avez un piste je veux bien même minime

    Merci d'avance

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Trois solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | head -n 15 | tail -n 1
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | awk '(NR==15) { print $0 }'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat -n fichier | grep "[[:space:]]15[[:space:]]" | cut -b 8-
    Il y a encore d'autres possibilités
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Sympa ta réponse c'est vraiment sympa.

    Mais ptite question pq 15?

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par llaurentt
    Sympa ta réponse c'est vraiment sympa.

    Mais ptite question pq 15?
    Hmmm !

    Citation Envoyé par llaurentt
    Sinon vous savez pas comment on peut acceder à tel ou tel numéro de ligne? j'arrive pas à trouver
    ex: je veux extraire la 15 ligne d'un fichier texte.
    Faut que je détaille ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    arf on s'est mal compris désolé c'est ma faute

    On fait c'était un exemple, je veux extraire pas les 15 première ligne mais la 15ème ligne.

    En fait je suis arrivé à faire un boucle de 1 à la fin de mon fichier.
    Et je voudra le parcourir ligne par ligne mais pas trouvé de fonction ou de méthode par afficher le première puis la deuxième puis la troisième etc...

    J'ai bien essayé avec head mais il m'extraire la première puis la première et le deuxième puis la 1 2 3ème etc... il ne vexut pas les extraire une par une

    Franchement je suis perdu, et je tourne en rond

    En tout cas merci d'avoir essayé de m'aider et excuses moi encore de ma question mal exprimée

  13. #13
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Les trois codes que je t'ai posté extraient tous les trois la 15e ligne du fichier. Pas les 15 première ou quoi que ce soit d'autre.

    Ca ne répond pas nécessairement à ton post original, mais répond à une de tes questions annexes et peut ouvrir d'autres pistes...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    ah parfait

    Ben je sais plus quoi dire

    Un grand merci pour ta rapidité et ta patience

    Par contre je pourrai que tester demain

    @+

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Re

    Bon c'est bon mon script à l'air de fonctionner

    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
    19
    20
    21
    22
    23
    #On calcule le nombre de ligne du fichier
    nb=`cat fichier | wc -l`
    b=$(($nb+1))
    a=1
    # On créé un dossier temporaire où seront créer les fichier
    `mkdir temp`
    # On va parcourir chaque ligne du fichier
    while test $a != $b
    do
    	# On extrait le code client
    	num=`cat fichier | head -n $a | tail -n 1 | cut -c 1-4`
    	# On cherche le nom du client qui est sur un autre fichier "nom"
    	nom=`grep $(($num)) nom | cut -d " " -f2`
    	# On cherche le mois et le jour
    	mois=`date --iso-8601 | cut -d - -f2`
    	jour=`date --iso-8601 | cut -d - -f3`
    	# Création du fichier dans le répertoire temporaire
    	`cat fichier | head -n $a | tail -n 1 >> temp/$nom$mois$jour`
    	a=$(($a+1))
    	echo $a/$b
    done
    #on stocke la liste des fichiers créés dans un fichier "liste"
    `ls temp/ > temp/liste`
    Merci pour l'aide apporté

    @+ Laurent

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

Discussions similaires

  1. [PowerShell] Script traitement copie fichier
    Par ghostrider95 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 15/01/2013, 17h15
  2. Script AWK et traitement de fichier
    Par pcsystemd dans le forum Administration système
    Réponses: 10
    Dernier message: 12/06/2009, 17h18
  3. script shell : lire un fichier et donner pour traitement au script
    Par pc974 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 14/05/2007, 14h38
  4. Traitement de fichier en shell script
    Par sam.fet dans le forum Linux
    Réponses: 3
    Dernier message: 03/05/2006, 14h30
  5. [Script .BAT] Concatenation de fichiers plats
    Par Jokeur dans le forum Autres langages
    Réponses: 1
    Dernier message: 03/05/2005, 12h14

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