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 :

Découper un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut Découper un fichier
    Bonjour, j'aimerai savoir faire un script qui partage un fichier en autant de partie qu'il y a de noms dans un autre fichier. (Je pense qu'on peut détecter de 2 manières, soit le fait que les noms commencent par une majuscule soit que comme c'est le premier argument de lligne )

    genre disons que j'ai un fichier qui contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Jean 1552 65485
    Henry 4515 5655
    Machin 4545 554
    et un autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    titi 1 15 24
    toto 12 56 8
    tata 14 7 5
    yolo 12 48 56
    yala 1 5 9
    tito 54 45 5
    test4 62 26 26
    rere 4 5 6
    roro 5 6 6
    (dans cet exemple, on a 3 noms donc on aura 3 parties)

    Je veux qu'en sortie du script, on ai en message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Jean -> partie 1 : de titi à tata
    Henry -> partie 2 : de yolo à tito
    Machin-> partie 3 : de test4 à roro
    Des idées?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,
    partage un fichier en autant de partie
    RTFM split
    qu'il y a de noms dans un autre fichier.
    RTFM wc.
    plus généralement, info coreutils.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Oui mais j'arrive pas à mettre ensemble pour créer le script, je connais ces commandes

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Non dsl, ce que je veux c'est avoir en sortie quelque chose sous cette forme:

    Jean -> partie 1 : de titi à tata
    Henry -> partie 2 : de yolo à tito
    Machin-> partie 3 : de test4 à roro

    Et c'est pas forcément 3 comme valeur non plus


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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Citation Envoyé par XanxXx
    Jean -> partie 1 : de titi à tata
    Henry -> partie 2 : de yolo à tito
    Machin-> partie 3 : de test4 à roro
    heu, tu veux cette sortie exactement, ou est-ce un résumé de ce que tu veux ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    C'est un exemple, dans mon premier post j'ai mis un exemple sur 2 fichiers simple

    Et c'est vraiment sous cette forme, c'est pas un résumé

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    est-ce que tu peux détailler les opérations à accomplir pour obtenir le résultat voulu :
    comment ferais-tu "à la main" ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Mea culpa.
    split ne semble s'intéresser qu'à la taille.
    Donc, avec un fichier de 788 octets, il coupe en 3 sans couper les lignes.
    On a, alors, 3 fichiers d'environ 256 octets.
    Sauf que, comme la première ligne est immense, on se retrouve avec un premier fichier de peu de lignes, et 2 autres fichiers longs.
    split ne résout pas la question.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n=3;for ((k=1;k<=$n;k++)); do awk -vn=$n -vk=$k -vl=$(sed -n '$=' fichier) '(int((NR-1)/(l/n))==k-1){if(p=="") p=$1;d=$1;} END{print "De",p,"à",d;} ' fichier ;done
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Ohlala c'est compliqué ce code
    J'ai testé et pour la partie " de valeur à valeur" ça à l'air de marché thx mais j'ai pas compris ton code

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Citation Envoyé par XanxXx
    j'ai pas compris ton code
    d'où ma requête :
    est-ce que tu peux détailler les opérations à accomplir pour obtenir le résultat voulu :
    comment ferais-tu "à la main" ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    d'où ma requête :
    Je sais pas trop comment expliquer d'avantages

    On a un certains nombre de noms dans un fichier1 (disons 3 pour faire simple) donc on aura 3 parties ( on divise le fichier2 en 3 parties égales (ou à une ligne près)).

    Je veux qu'en lançant le script la console affiche en messages:

    1erNomdufichier1 -> partie1 : du 1er mot de la première ligne de la partie 1 au 1er mot de la dernière ligne de la partie 1
    2emeNomdufichier1 -> partie2 : du 1er mot de la première ligne de la partie 2 au 1er mot de la dernière ligne de la partie 2
    3emeNomdufichier1 -> partie3 : du 1er mot de la première ligne de la partie 3 au 1er mot de la dernière ligne de la partie 3


  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Je sais pas trop comment expliquer d'avantages
    Il ne faut pas expliquer davantage. Il faut bosser.
    Nous pouvons inspirer ou débloquer. Mais le travail, c'est à toi de le faire.

    Ce n'est pas la peine de copier/coller une troisième fois l'énoncé. (Ni plus)
    N_BaH t'a déjà demandé 2 fois ce que tu ferais.
    Et là ... c'est le silence. Pas de réponse. Pas le début du commencement de la moindre action.

    Au boulot !

    Ohlala c'est compliqué ce code
    C'est vrai ! Mais l'avantage est que tu peux encore remplacer le awk par un split, ou autre.
    Livre-nous une version awk avec un seul script. Avec les tableaux associatifs, plus de boucle du tout.

    Courage !
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,

    c'est marrant, on oublie souvent les facilités de sed pour ce genre de traitement:
    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 /tmp/fic2
    titi 1 15 24
    toto 12 56 8
    tata 14 7 5
    yolo 12 48 56
    yala 1 5 9
    tito 54 45 5
    test4 62 26 26
    rere 4 5 6
    roro 5 6 6
    $ sed -n 's/ .*//;3~3p;1~3p;$p' /tmp/fic2
    titi
    tata
    yolo
    tito
    test4
    roro
    roro
    La répétition de la dernière ligne est volontaire pour les cas ou le fichier n'a pas un nombre de ligne exactement divisible.
    Et avec un petit xargs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed -n 's/ .*//;3~3p;1~3p;$p' /tmp/fic2 | xargs -n 2
    titi tata
    yolo tito
    test4 roro
    roro
    reste plus qu'à traiter les lignes de 2 arguments avec le fichier des noms...
    Cordialement.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    C'est vrai que ça fait des trucs pas mal
    Tu peux détailler/expliquer ce bout de code stp?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    et si tu nous proposais, à la lumière du man sed, TON interprétation du code fourni par disedorgue ?

    nous nous ferons un plaisir de confirmer, et/ou corriger, commenter...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Je sais pas, ça remplace toutes les 3 lignes pair et impair (3~3p;1~3p), aucune idée et quand on débute c'est pas évident et oui j'ai cherché des docs un peu partout sur des sites.

    (Et sinon si quelqu'un connait directement la réponse je vois pas l'intérêt de laisser galérer quelqu'un pendant des heures je trouve.)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    parce que je considère qu'on n'a pas à te donner la béquée, ou battre des ailes à ta place.
    par contre, on peut t'aider à trouver où et comment chasser.

    man sed
    first ~ step
    Match every step 'th line starting with line first . For example, ``sed -n 1~2p'' will print all the odd-numbered lines in the input stream, and the address 2~5 will match every fifth line, starting with the second. first can be zero; in this case, \*(sd operates as if it were equal to step . (This is an extension.)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Bah pour moi le seul but d'un forum c'est de gagner du temps, et pas d'en perdre à argumenter mais c'est pas grave, bonne soirée.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    gagner du temps, oui; faire bosser les autres sans montrer aucun effort, non.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/02/2009, 17h19
  2. [RegEx] Découper un fichier xml
    Par Dargos dans le forum Langage
    Réponses: 1
    Dernier message: 10/04/2006, 15h28
  3. [Framework] Découper un fichier de conf
    Par Tiaps dans le forum Spring
    Réponses: 10
    Dernier message: 17/11/2005, 14h52
  4. [SAX] [Optimisation] Découper un fichier XML
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 27/10/2005, 17h02
  5. Comment découper un fichier AVI ?
    Par supergrey dans le forum Windows
    Réponses: 2
    Dernier message: 19/09/2005, 09h10

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