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 :

Réorganiser un tableau.csv: cellules sur la même ligne, dans une colonne différente


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut Réorganiser un tableau.csv: cellules sur la même ligne, dans une colonne différente
    Bonjour

    Je passe le permis poids lourd. Le jour de l'examen, on nous posera 10 questions.
    Pour travailler, on nous a donné 20 tableaux de 10 lignes, soit 200 questions en tout.
    Chaque ligne correspond à un thème qui doit être abordé.

    Question Série 1 – Thème 1 Question Série 2 – Thème 1 Question Série 3 – Thème 1
    Question Série 1 – Thème 2 Question Série 2 – Thème 2 Question Série 3 – Thème 2
    Question Série 1 – Thème 3 Question Série 2 – Thème 3 Question Série 3 – Thème 3
    Question Série 1 – Thème 4 Question Série 2 – Thème 4 Question Série 3 – Thème 4
    Question Série 1 – Thème 5 Question Série 2 – Thème 5 Question Série 3 – Thème 5
    Question Série 1 – Thème 6 Question Série 2 – Thème 6 Question Série 3 – Thème 6
    Question Série 1 – Thème 7 Question Série 2 – Thème 7 Question Série 3 – Thème 7
    Question Série 1 – Thème 8 Question Série 2 – Thème 8 Question Série 3 – Thème 8
    Question Série 1 – Thème 9 Question Série 2 – Thème 9 Question Série 3 – Thème 9
    Question Série 1 – Thème 10 Question Série 2 – Thème 10 Question Série 3 – Thème 10

    Le jour de l'examen, ils vont piocher une question par thème parmi les 20 séries de façon aléatoire.

    Pour m'entraîner, je veux copier les questions dans un tableur.csv: 20 colonnes et 10 lignes.
    J'aimerais réorganiser les lignes de façon aléatoire: chaque question ne peut être déplacée que de gauche à droite dans le tableau mais ne peut pas changer de rang (thème 3 reste en ligne 3 par exemple).

    Voilà le résultat que je veux. Quant au moyen pour y parvenir...
    Je ne vois pas comment commencer mes recherches pour le moment

    Celano

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    La commande sort trie un fichier mais elle peut aussi le mélanger.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    $ cat <<FDF >routier.txt
    > 1
    > 2
    > 3
    > 4
    > 5
    > 6
    > 7
    > 8
    > 9
    > 10
    > FDF
    $ sort -nr routier.txt
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    $ sort -R routier.txt
    6
    1
    10
    7
    3
    9
    2
    5
    8
    4
    $ sort -R routier.txt
    4
    3
    8
    6
    10
    2
    9
    1
    7
    5
    $ sort -R routier.txt
    3
    9
    5
    7
    8
    1
    10
    4
    6
    2
    Une fois que tu as un ordre, tu peux utiliser awk qui désigne chaque champ de la ligne par son rang.
    Exemple: $5 est le 5ème champ.
    Il devient facile pour toi de mélanger.

    Tu peux transmettre ton fichier d'entrée et ton fichier d'ordre à awk pour créer un fichier de sortie.

    Quel est le format des données du fichier d'entrée ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut
    Merci Flo

    Donc si je comprends bien, il faut un fichier ordre.txt qui comprenne ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $1
    $2
    $3
    $4
    $5
    $6
    $7
    $8
    $9
    $10
    Ce qui permettrait de piocher les bonnes lignes dans les fichiers aléatoires?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Je pensais plus à un truc comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ awk '(FNR==NR){a[NR]=$1;next;} {for (i=1;i<=NF;i++) printf $a[i]" ";print "";}' <(echo -e "1\n2\n3"|sort -R) <(echo A B C;echo D E F)                                                                                                                                                                       
    A C B
    D F E
    $ awk '(FNR==NR){a[NR]=$1;next;} {for (i=1;i<=NF;i++) printf $a[i]" ";print "";}' <(echo -e "1\n2\n3"|sort -R) <(echo A B C;echo D E F)
    B C A
    E F D
    Pas de panique. Quelques explications:

    • <( ) est une substitution de processus pour considérer la sortie comme un fichier. Le premier est le fichier d'ordre et le second ton fichier de questions.
    • (FNR==NR){blablabla1;next;} { blablabla2;} est une structure classique. La première accolade ne s'applique qu'à ton premier fichier. Les autres accolades (ici, une) s'appliquent aux autres fichiers.
    • a[] est un tableau pour retenir l'ordre.
    • $x désigne le champ x. Donc $3 désigne le 3ème, $(n+1) désigne le n+1ème, et $a[i] désigne le champ de rang fourni par le i-ème élément du tableau a.
    • printf, c'est juste pour éviter le retour à la ligne. Une autre façon de faire peut être:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      $ awk '(FNR==NR){a[NR]=$1;next;} {print $a[1],$a[2],$a[3];}' <(echo -e "1\n2\n3"|sort -R) <(echo A B C;echo D E F)
      C B A
      F E D
      Peut-être plus élégant. À voir.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut
    Je vais prendre une aspirine!
    Non, je rigole. Je vais prendre le temps de comprendre le code. Je te remercie!

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut
    Merci Flo de détailler aussi précisément tes explications.

    J'y vois un peu plus clair. J'ai fait quelques bidouillages pour comprendre ce que ça change.
    Grâce à ton exemple, j'arrive à mélanger les questions d'un fichier. Mais j'aimerais piocher une question de rang 1, puis 2 puis 3... jusqu'à 10, chacune piochée au hasard dans un fichier parmi les 20 fichiers de 10 questions. Il faudrait donc que je rajoute un dans la façon de choisir les fichiers. Et là je ne vois pas encore. Mais je continue à creuser

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

Discussions similaires

  1. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  2. Réponses: 12
    Dernier message: 30/12/2010, 14h30
  3. [XL-2003] Adapter Formule qui fait référence à une cellule sur la même ligne
    Par toukii dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/06/2009, 00h25
  4. Réponses: 1
    Dernier message: 12/12/2007, 13h38
  5. Réécrire sur les mêmes lignes dans un shell
    Par Vincent Bel dans le forum C++
    Réponses: 5
    Dernier message: 21/08/2007, 17h21

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