Forum Programmation.shell Coller du texte de plusieurs fichiers dans un fichier csv

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
4
20
oct.
2021

Bonjour,
je sollicite de l'aide car je ne trouve vraiment pas la solution pour un problème que j'ai dans un devoir. Je suis débutant en shell.

J'ai 3 fichiers:
-prenoms.txt qui contient une liste de prénoms.
-genres.txt qui contient la liste des genres du fichier prenoms.txt.
-origines.txt qui contient la liste des origines du fichier prénoms.txt.

J'aimerais créer un fichier info.csv qui combine le contenu des 3 fichiers ligne par ligne et séparé par ";".
Comme ceci:
aapeli;m;finnish
aapo;m;finnish
aaren;m,f;english

On m'impose de n'utiliser qu'une seule commande. Je n'ai qu'un indice "cherchez la commande "coller" en anglais, mais je n'ai pas trouvé.

Merci de répondre pour m'aider.

  • # que dit le dico ?

    Posté par  . Évalué à 4 (+2/-0).

    https://dictionnaire.reverso.net/francais-anglais/coller (chercher dans la page « qch sur qch » pour arriver directement sur la bonne traduction) https://www.larousse.fr/dictionnaires/francais-anglais/coller/17065 (aller à la ligne « informatique » pour le terme cherché) https://www.linguee.fr/francais-anglais/traduction/coller.html (c'est la première) etc.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

    • [^] # Re: que dit le dico ?

      Posté par  . Évalué à 4 (+2/-0). Dernière modification le 20/10/21 à 06:02.

      C'est quand même super facile quand on connaît la réponse à l'indice :)

      Un petit complément : pour savoir ce que fait une commande shell donnée, et (surtout) comment il est possible de l'utiliser, il y a (aussi) une commande shell : man. Cela ne permet pas de faire une recherche, mais c'est bien utile pour comprendre rapidement ou en aide-mémoire. Souvent, il y a de petits exemples pour aider.

      Par exemple, man ls affiche l'aide sur la commande ls. De manière plus amusante, on peut faire un man man pour savoir ce que fait la commande man.

      Petit piège : man cd ne donne pas d'aide, car cd est une commande built-in au shell ;)

      Matricule 23415

      • [^] # Re: que dit le dico ?

        Posté par  . Évalué à 3 (+2/-0).

        Super, merci beaucoup de m'avoir aiguiller. J'avais regardé le dictionnaire mais je n'avais rien trouvé.

        J'ai donc tapé:
        paste -d ';' prenoms.txt genres.txt origines.txt > info.csv

        et ça a marché !

        Merci encore !

        • [^] # Re: que dit le dico ?

          Posté par  (site Web personnel) . Évalué à 3 (+2/-0).

          Mince, je découvre cette commande.

          J'aurais sûrement fait 3x plus compliqué au moins sans elle. S'agit de la retenir maintenant.

          • [^] # Re: que dit le dico ?

            Posté par  . Évalué à 3 (+1/-0).

            Pour la retenir, il suffit de se rappeler que ça permet d'accoler (coller) des lignes de différents fichiers… Mais j'ai beau la connaitre il m'arrive de confondre avec d'autres (surtout avec join), et donc je vérifie toujours le man (whatis) avant de les usiter.

            “It is seldom that liberty of any kind is lost all at once.” ― David Hume

            • [^] # Re: que dit le dico ?

              Posté par  . Évalué à 2 (+0/-0).

              La tendance de mon côté, c'est de chercher merge, que je ne trouve pas… :p

              Matricule 23415

              • [^] # Re: que dit le dico ?

                Posté par  . Évalué à 2 (+0/-0).

                Je fais parfois la recherche avec merge aussi, mais c'est plus simple avec une installation un peu minimale…

                $ whatis paste
                paste(1)                 - merge corresponding or subsequent lines of files
                XStoreBytes(3), XStoreBuffer(3), XFetchBytes(3), XFetchBuffer(3), XRotateBuffers(3) - manipulate cut and paste buffers
                paste(1)                 - merge corresponding or subsequent lines of files
                $ whatis merge
                dot_clean(1)             - Merge._* files with corresponding native files
                mib2c-update(1)          - script to merge custom code into updated mib2c code
                paste(1)                 - merge corresponding or subsequent lines of files
                ppdmerge(1)              - merge ppd files (deprecated)
                sdiff(1)                 - side-by-side merge of file differences
                sort(1)                  - sort or merge records (lines) of text and binary files
                FcCharSetMerge(3)        - Merge charsets
                XrmMergeDatabases(3), XrmCombineDatabase(3), XrmCombineFileDatabase(3) - merge resource databases
                XtAddExposureToRegion(3) - merge exposure events into a region
                XtSetArg(3), XtMergeArgLists(3) - set and merge ArgLists
                CPAN::Meta::Merge(3pm)   - Merging CPAN Meta fragments
                Hash::Merge(3pm)         - Merges arbitrarily deep hashes into a single hash
                dot_clean(1)             - Merge._* files with corresponding native files
                mib2c-update(1)          - script to merge custom code into updated mib2c code
                paste(1)                 - merge corresponding or subsequent lines of files
                ppdmerge(1)              - merge ppd files (deprecated)
                sdiff(1)                 - side-by-side merge of file differences
                sort(1)                  - sort or merge records (lines) of text and binary files
                git-fmt-merge-msg(1)     - Produce a merge commit message
                git-merge(1)             - Join two or more development histories together
                git-merge-base(1)        - Find as good common ancestors as possible for a merge
                git-merge-file(1)        - Run a three-way file merge
                git-merge-index(1)       - Run a merge for files needing merging
                git-merge-one-file(1)    - The standard helper program to use with git-merge-index
                git-merge-tree(1)        - Show three-way merge without touching index
                git-mergetool(1)         - Run merge conflict resolution tools to resolve merge conflicts
                git-mergetool--lib(1)    - Common Git merge tool shell scriptlets
                tapi-archive(1)          - Merge or thin text-based stub files
                

                Sinon, après avoir répondu plus loin je me suis rendu compte que pour s'en rappeler il faut penser copy/cut-paste pour extraire-juxtaposer…

                “It is seldom that liberty of any kind is lost all at once.” ― David Hume

                • [^] # Re: que dit le dico ?

                  Posté par  . Évalué à 3 (+1/-0).

                  Ça vient juste pas naturellement :) Et on le ressent dans les descriptions.

                  On se demande bien quel(s) acteur(s) de l'informatique aurai(en)t bien pu déformer l'usage naturel de merge vers paste :p

                  Matricule 23415

                  • [^] # Re: que dit le dico ?

                    Posté par  . Évalué à 3 (+1/-0).

                    peut-etre parce que que "merge" c'est fusionner (dont dans un fichier, ajouter le contenu d'un autre fichier)
                    alors que "paste" sera de prendre chaque fichier et d'en coller le contenu dans un fichier de sortie ?

      • [^] # Re: que dit le dico ?

        Posté par  . Évalué à 2 (+0/-0).

        Il a bien indiqué :

        On m'impose de n'utiliser qu'une seule commande. Je n'ai qu'un indice "cherchez la commande "coller" en anglais, mais je n'ai pas trouvé.

        Donc j'en déduis qu'il n'a pas trouvé la bonne traduction (et il faut admettre que ce n'est pas forcément évident.) Une fois le/la mot/commande trouvé/e ta réponse donne la seconde étape

        Un petit complément : pour savoir ce que fait une commande shell donnée, et (surtout) comment il est possible de l'utiliser, il y a (aussi) une commande shell : man. Cela ne permet pas de faire une recherche, mais c'est bien utile pour comprendre rapidement ou en aide-mémoire. Souvent, il y a de petits exemples pour aider.

        Par contre, il est bien possible de rechercher les pages de manuel… Il faut que le moteur d'indexation soit activé (en général c'est le cas) et la base de donnée associée à jour (je crois que ça se fait au moment de l'installation/désinstallation des paquets.) Quand ces conditions sont réunies, la partie « NOM » et une portion de la partie « DESCRIPTION » de chaque manuel sont indexées et on peut faire une recherche sur les mots qui y sont ; mais ça va dépendre des locales (en anglais chez moi). Les commandes pour cet effet sont

        • man -k ou apropos
        • man -f ou whatis

        Exemple

        # la partie indexée de la commande "ls" par exemple
        $ man ls | head -n 5
        
        LS(1)                     BSD General Commands Manual                    LS(1)
        
        NAME
             ls -- list directory contents
        
        # rechercher tout ce qui contient "directory"
        $ apropos directory | grep git
        git-clone(1)             - Clone a repository into a new directory
        git-mv(1)                - Move or rename a file, a directory, or a symlink
        git-stash(1)             - Stash the changes in a dirty working directory away
        $ apropos directory | wc -l
             129
        
        # rechercher les entrées avec "list" et/ou "directory"
        $ apropos list directory | wc -l
             434
        
        # les deux sont différents mais je ne sais plus la subtilité
        $ whatis list directory | wc -l
             303
        $ whatis directory | wc -l
             115
        $ whatis directory | grep git
        git-clone(1)             - Clone a repository into a new directory
        git-mv(1)                - Move or rename a file, a directory, or a symlink
        git-stash(1)             - Stash the changes in a dirty working directory away
        

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

        • [^] # Re: que dit le dico ?

          Posté par  . Évalué à 2 (+0/-0). Dernière modification le 20/10/21 à 07:50.

          il faut admettre que ce n'est pas forcément évident

          Tout à fait ! Je me demande dans quelle mesure l'indice en est un, au final. Le plus dur, c'est de savoir nommer/décrire ce qu'on cherche à faire. J'aurais pensé à "juxtaposer", en français.

          ta réponse donne la seconde étape

          C'était bien le but, pas de problème. Je ne remettais pas en cause ta réponse !

          Par contre, il est bien possible de rechercher les pages de manuel

          Oui, bien sûr, mais on va peut-être un peu trop loin, là (ou pas). Il y a aussi la complétion qui peut aider si l'on n'est plus sûr de l'orthographe, ou pour les options longues.

          Mais ça, ça se découvre entre autre à l'usage :)

          Matricule 23415

          • [^] # Re: que dit le dico ?

            Posté par  . Évalué à 2 (+0/-0).

            il faut admettre que ce n'est pas forcément évident

            Tout à fait ! Je me demande dans quelle mesure l'indice en est un, au final. Le plus dur, c'est de savoir nommer/décrire ce qu'on cherche à faire. J'aurais pensé à "juxtaposer", en français.

            Tout à fait, la commande juxtapose les colonnes, à l'opposé de cut qui les extrait.
            Et pour l'indice, je soupçonne le/la prof de ne pas spécialement pratiquer l'anglais en dehors des termes informatiques…

            “It is seldom that liberty of any kind is lost all at once.” ― David Hume

        • [^] # Re: que dit le dico ?

          Posté par  . Évalué à 2 (+0/-0). Dernière modification le 20/10/21 à 08:23.

          # les deux sont différents mais je ne sais plus la subtilité

          Comme moi non plus, je dirais au vu des descriptions que apropos fonctionne par expression rationnelle et whatis par terme indexé.

          Et sinon, on y voit que c'est mandb pour la mise à jour.

          Enfin, je suppose que tu as vu tout ça :)

          Matricule 23415

          • [^] # Re: que dit le dico ?

            Posté par  . Évalué à 2 (+0/-0).

            Toutes les implémentations ne se valent pas et je n'ai pas spécialement creusé. J'ai une BSD et les descriptions y semblent très similaires à mon goût.

            $ man apropos | head -n 16
            apropos(1)                                                          apropos(1)
            
            
            
            NAME
                   apropos - search the whatis database for strings
            
            SYNOPSIS
                   apropos keyword ...
            
            DESCRIPTION
                   apropos  searches a set of database files containing short descriptions
                   of system commands for keywords and displays the result on the standard
                   output.
            
            AUTHOR
            $ man whatis | head -n 19
            whatis(1)                                                            whatis(1)
            
            
            
            NAME
                   whatis - search the whatis database for complete words.
            
            SYNOPSIS
                   whatis keyword ...
            
            DESCRIPTION
                   whatis  searches  a set of database files containing short descriptions
                   of system commands for keywords and displays the result on the standard
                   output.  Only complete word matches are displayed.
            
                   The  whatis  database  is  created using the command /usr/libexec/make-
                   whatis.
            
            AUTHOR
            

            Ici c'est makewhatis qui joue le rôle de mandb des GNU/Linux ; et l'un fait de la recherche de mot complet tandis que l'autre doit faire du mot partiel (peut-être que l'implémentation GNU va plus loin en utilisant des expressions rationnelles, faudra que je vérifie sur un des serveurs au boulot.)

            “It is seldom that liberty of any kind is lost all at once.” ― David Hume

            • [^] # Re: que dit le dico ?

              Posté par  . Évalué à 2 (+0/-0). Dernière modification le 20/10/21 à 08:55.

              C'est vrai, ça diffère :)

              Sous debian 11 :

              $ man apropos | head -n 23
              APROPOS(1)                                Manual pager utils                                APROPOS(1)
              
              NAME
                     apropos - search the manual page names and descriptions
              
              SYNOPSIS
                     apropos  [-dalv?V]  [-e|-w|-r] [-s list] [-m system[,...]] [-M path] [-L locale] [-C file] key‐
                     word ...
              
              DESCRIPTION
                     Each manual page has a short description available within it.  apropos  searches  the  descrip‐
                     tions for instances of keyword.
              
                     keyword is usually a regular expression, as if (-r) was used, or may contain wildcards (-w), or
                     match the exact keyword (-e).  Using these options, it may be necessary to quote the keyword or
                     escape (\) the special characters to stop the shell from interpreting them.
              
                     The  standard matching rules allow matches to be made against the page name and word boundaries
                     in the description.
              
                     The database searched by apropos is updated by the mandb program.  Depending on your  installa‐
                     tion,  this  may be run by a periodic cron job, or may need to be run manually after new manual
                     pages have been installed.
              

              L'important, c'est "…as if (-r) was used…" : c'est l'option par défaut.

              et

              $ man whatis | head -n 25
              WHATIS(1)                                 Manual pager utils                                 WHATIS(1)
              
              NAME
                     whatis - display one-line manual page descriptions
              
              SYNOPSIS
                     whatis [-dlv?V] [-r|-w] [-s list] [-m system[,...]] [-M path] [-L locale] [-C file] name ...
              
              DESCRIPTION
                     Each  manual page has a short description available within it.  whatis searches the manual page
                     names and displays the manual page descriptions of any name matched.
              
                     name may contain wildcards (-w) or be a regular expression (-r).  Using these options,  it  may
                     be  necessary to quote the name or escape (\) the special characters to stop the shell from in‐
                     terpreting them.
              
                     index databases are used during the search, and are updated by the mandb program.  Depending on
                     your installation, this may be run by a periodic cron job, or may need to be run manually after
                     new manual pages have been installed.  To produce an old style text whatis  database  from  the
                     relative index database, issue the command:
              
                     whatis -M manpath -w '*' | sort > manpath/whatis
              
                     where manpath is a manual page hierarchy such as /usr/man.
              

              Matricule 23415

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.