Aide pour un projet bash

Fermé
MoonRiver - Modifié le 11 oct. 2021 à 15:32
mamiemando Messages postés 33069 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 avril 2024 - 11 oct. 2021 à 15:31
Bonjour,

Je suis en Master de Biologie et j'ai des cours de Bash (ce qui n'a pas de sens vu que je suis en biologie) et on a un travail à rendre en bash pour le vendredi 15.
Je n'y comprends vraiment rien et si j'ai une trop mauvaise note j'irais directement aux rattrapages.

Je voulais savoir si quelqu'un qui se débrouille bien en Bash pourrait m'aider voir faire ce projet pour moi. Je ne pense pas que ça prenne très longtemps à quelq'un qui connait bien Bash.
Je suis prête à rémunérer pour ce service.

Si quelqu'un veut bien m'aider, ça me sauverait.
Je suis vraiment désespérée.
Je peux vous envoyer le projet par mail (un fichier pdf avec le cours et les commandes qu'on a vu) avec le fichier qu'on doit traiter.

Voici le projet :

The file list.csv contains 4 columns:

GO ID; ORGANISM NAME; PHYLUM; ORDER


For each line, write the ORGANISM NAME into a file named after
the GO ID and place it into the corresponding phylum/order
directory

For example, this line:
GO0552390;Synechococcus sp. BS56D;CYANOBACTERIA;Synechococcales


gives:
CYANOBACTERIA/Synechococcales/GO552390


Go0552390 file contains:
Synechococcus sp. BS56D
.

PROJECT:
  • Comment and indent your code
  • Secure your script with user input controls
  • Errors are hidden in the Go ID and PHYLUM columns, add

controls to avoid them.

Hints:
correct GO ID: "Go" followed by 7 numbers (Go0550614)
Use
grep -E
option

Send your bash script!


Merci beaucoup de votre attention.
Marie

1 réponse

mamiemando Messages postés 33069 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 avril 2024 7 747
Modifié le 11 oct. 2021 à 15:37
Bonjour Marie,

Je suis en Master de Biologie et j'ai des cours de Bash (ce qui n'a pas de sens vu que je suis en biologie) et on a un travail à rendre en bash pour le vendredi 15.

Détrompe-toi, car même si tu fais de la biologie, si tu es amené à faire des expériences à l'aide de logiciels, savoir les orchestrer avec un langage de script comme bash est une corde qui peut être très utile.

Sache également que bash permet de facilement et rapidement extraire de l'information de fichiers texte.

Je voulais savoir si quelqu'un qui se débrouille bien en Bash pourrait m'aider voir faire ce projet pour moi. Je ne pense pas que ça prenne très longtemps à quelq'un qui connait bien Bash. Je suis prête à rémunérer pour ce service.

Non ce n'est pas comme ça que ça marche. Ici le forum est gratuit, pour tout le monde, et tant que tu mets en évidence que tu as un peu réfléchi à ton exercice, cherché à comprendre, mais que tu es bloqué(e) car tu ne comprends pas une notion, tu auras de l'aide. Je t'invite à prendre deux minutes pour lire cet article pour maximiser tes chances d'avoir une réponse.

Pour information, toutes les commandes shell (donc bash) sont documentées dans les pages de
man
(le manuel, sous linux) et tu peux les retrouver en cherchant dans ton moteur de recherche favori si tu n'es pas sou linux (tape par exemple dans google
man cut
pour apprendre à utiliser
cut
). N'hésite pas non plus à chercher des tutoriels sur le langage shell pour te mettre le pied à l'étrier.

Voici quelques éléments / commandes pour démarrer :
  • Lire un fichier ligne par ligne ;
  • cut -d ... -f ...
  • grep -E ...
    pour ne conserver que les lignes dont le GO ID est bien formé. Il est nécessaire de comprendre à quoi correspondent les opérateurs des expressions rationnelles (= expressions régulières) pour construire le bon filtre (ils sont documentés dans
    man grep
    ). Tu auras besoin des opérateur
    ^
    ,
    { ... }
    et
    [...]
    .
  • L'opérateur
    |
    (tube en français, pipe en anglais -- se prononce païpe) pour chaîner le résultat écrit par une commande avec une autre commande capable de raisonner sur l'entrée standard. Par exemple
    echo ... | grep ... | cut ...
    .
  • L'opérateur
    $( ... )
    (ou
    `...`
    ) qui permet d'injecter le résultat d'une commande shell dans une chaîne de caractère (éventuellement, une autre commande shell).


Ce que je te propose pour avancer, c'est que tu commences à écrire ton script. Je te recommande vivement de préparer au préalable un petit fichier csv qui te servira à tester ton programme au fur et à mesure de son écriture. Ensuite, essaye de le construire progressivement :
  • essaye de lire le fichier csv à partir de ton script shell ;
  • puis essaye d'afficher chaque ligne avec une boucle
    for
    ;
  • puis essaye de ne conserver que les lignes bien formées (avec
    grep
    ) et un
    if
    ;
  • puis essaye d'extraire les différentes valeurs utiles (celles de tes colonnes) (avec l'opérateur
    $( ... )
    , les commandes
    echo
    et
    cut
    .
  • puis essaye de crafter le commande qui crée le répertoire (voir
    mkdir -p
    ) et le fichier adéquat (voir
    echo
    et opérateur
    >
    ).


Ton projet est assez court, il se code en une vingtaine de lignes s'il est bien indenté, donc la principale difficulté c'est d'assembler le lego.

Bonne chance
0