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 :

Suppression par correspondance bash ou shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut Suppression par correspondance bash ou shell
    Bonjour,

    Je possède une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lig-a-20.pdb
    lig-a-80.pdb
    lig-a-20.txt
    lig-a-80.txt
    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
     
    lig-a-20.pdb:
    Model 1
    Model 2
     
    lig-a-20.txt:
    score 1 
    score 2
    score 3
     
    lig-a-80.pdb:
    Model 1
    Model 2
    Model 3
     
     
    lig-a-80.txt:
    score 1
    score 2
    score 3
    score 4
    score 5
    Il n'y a plus de score que de model par fichier correspondants. L'idée ce serait de supprimer les scores en trop dans les fichiers txt. en fonction du nombre de model correspondant dans le fichier .pdb et pas " deux au hasard" mais la fin du fichier en trop dans le fichier txt.

    Je fais une boucle for, mais la boucle for va travailler comme si une matrice et ce n'est pas du tout ça


    Après promis c'était ma dernière question

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 360
    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 360
    Par défaut
    exemple pour un couple de fichier pdb/txt (à toi de gérer la boucle) :
    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
    $ cat l1.pdb
    Model 1
    Model 2
    Model 3
     
    $ cat l1.txt
    score 1
    score 2
    score 3
    score 4
    score 5
    $ sed -n 's/Model/score/p' l1.pdb | grep -f - l1.txt
    score 1
    score 2
    score 3

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    avec join.
    mais il faut quand même encore faire une boucle for sur un Développement de chemins !

    ou bien est-ce encore un exercice d'algorithmique à faire en 100% shell ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 360
    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 360
    Par défaut
    peut-on considérer ce genre de ligne comme juste du bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval "$(printf "sed -n 's/Model/score/p' %s | grep -f - %s\n" l*)"

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Merci

    Mais si tu avais cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat l1.pdb
    Model 1
    Model 2
    Model 3
     
    $ cat l1.txt
    1
    2
    3
    4
    5
    Juste à partir de l'indice

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 360
    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 360
    Par défaut
    ça s'appelle un changement de spécifications...

    D'où, l'intérêt d'être clair dans l'exposé du problème.

    Donc, expose correctement le problème et les formats de tes fichiers qui ne prête pas à confusion et après on pourra éventuellement t'aider.

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat l1.pdb
    Model 1
    Model 2
    Model 3
     
    $ cat l1.txt
    text text text
    text text
       1 text text text
       2 text text text
       3 text text text
       4 text text text
       5 text text text

    Pour modifier l1.txt en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat l1.txt
    text text text
    text text
       1 text text text
       2 text text text
       3 text text text

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

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

    Moi, je sais faire. Et toi, comment ferais-tu à la main ?

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    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
    for poses in ./*.pdb ; do
    	name_1=$(basename $poses .pdb)
    	# capture de la valeur la plus grand pour Model
    	grep 'Model' $poses | tail -n 1 > temp1
    	a=($(cat temp1 ))
    	# Ajout de + 1 à la valeur la plus grande, car sed plus loin, supprimera la ligne indiquée et le reste du fichier
    	let "val=${a[1]} + 1"
    	for texte in ./*.txt; do
    		grep "  $val " $texte > temp2
    		b=($(cat temp2 ))
                    # le dernier élément du tableau, ici ${b[3]}, devient le motif à partir duquel on supprimera le reste du fichier
                    # Suppression des lignes de scores en trop dans le fichier texte
    		sed -i "/${b[3]}/,$ d" $texte 
    		rm temp*
     
    	done	
    done
    le pd de ce code c'est qu'il fait une matrice, au lieu de prendre le fichier correspondant

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Combien de lignes dans le premier fichier ? n1
    Combien de lignes dans le second fichier ? n2 . Soustrayons les 2 lignes immuables.
    Tu détermines le minimum de n1 et n2. Appelons-le ns.
    On ajoute deux pour les deux lignes immuables. ns=min(n1,n2-2)+2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '1,'$ns'p;' l1.txt

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '1,'$ns'p;' l1.txt
    le input l1.pdb on le met où ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Combien de lignes dans le premier fichier ? n1
    Combien de lignes dans le second fichier ? n2 . Soustrayons les 2 lignes immuables.
    Tu détermines le minimum de n1 et n2. Appelons-le ns.
    On ajoute deux pour les deux lignes immuables. ns=min(n1,n2-2)+2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '1,'$ns'p;' l1.txt
    comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ mapfile -t pdb <l1.pdb
    $ mapfile -t txt <l1.txt
    $ printf '%s\n' "${txt[@]::${#pdb[*]}+2}"
    text text text
    text text
       1 text text text
       2 text text text
       3 text text text
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    $ mapfile -t pdb <l1.pdb
    $ mapfile -t txt <l1.txt
    $ printf '%s\n' "${txt[@]::${#pdb[*]}+2}"
    text text text
    text text
    1 text text text
    2 text text text
    3 text text text
    [/code]?
    Désolé mais ce le code ne marche pas si "text" contient des caractère spéciaux ou d'autres nombres. Il faudrait vraiment aller chercher le motif "Model " et se baser sur le numéro le plus haut à côté de "Model", puis allé dans le fichier texte du même basename, et aller trouver la ligne commençant par la valeur la plus haute pour "Model" ; ici une ligne qui commence par "3" et supprimer toutes les lignes en dessous, sans toucher au lignes au dessus.

  14. #14
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Pour lig-a-20.pdb, la valeur la plus haute de Model c'est 2, donc dans lig-a-20.txt, toutes les lignes après la ligne commençant par 2 (donc la ligne commençant par 3, jusqu'à la fin) doit être supprimée.

    Pour lig-a-80.pdb, la valeur la plus haute de Model c'est 3, donc dans lig-a-80.txt, toutes les lignes après la ligne commençant par 3 (donc les lignes commençant par 4 et 5, jusqu'à la fin) doivent être supprimée.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    Désolé mais ce le code ne marche pas si "text" contient des caractère spéciaux ou d'autres nombres. Il faudrait vraiment aller chercher le motif "Model " et se baser sur le numéro le plus haut à côté de "Model", puis allé dans le fichier texte du même basename, et aller trouver la ligne commençant par la valeur la plus haute pour "Model" ; ici une ligne qui commence par "3" et supprimer toutes les lignes en dessous, sans toucher au lignes au dessus.
    ce que contiennent les lignes n'a aucune importance : le code se base uniquement sur le nombre de lignes.

    et, quand un fichier en exemple comporte des exceptions («caractère spéciaux ou d'autres nombres»), il faut montrer ce fichier !

    on est déjà bien gentil de faire ton boulot (parce que ça nous amuse), on ne va pas en plus chercher à recréer des fichiers exceptionnels par rapport aux spécifications de départ !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Désamorces, c'est juste un script bash/shell (c'est pas du fortran, c'est pas le prix de l'essence, c'est pas la guerre en Ukraine), si y a pas de solutions y aura pas de solutions, je ferais à la main, c'est pas grave

    Feel good

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    ah, mais il y a une solution !
    il faut juste qu'on sache de quoi on part, et que les spécifications ne changent pas tout le temps.
    mais surtout qu'on sache exactement ce qu'on doit traiter.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Par défaut
    Ok désolé

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2007, 14h30
  2. Etude par correspondance.. Chance ou handicap ?
    Par bipbip2006 dans le forum Emploi
    Réponses: 1
    Dernier message: 22/06/2006, 14h12
  3. [MySQL] Suppression par ligne
    Par Invité dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 15/05/2006, 14h38
  4. CODE RETOUR GENERE PAR PL/SQL POUR SHELL UNIX
    Par mimi_été dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/11/2004, 08h32

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